#python #json #pandas
#python #json #панды
Вопрос:
Я пытаюсь написать класс Python, который принимает запрос json и массив json, а затем фильтрует массив на основе данных в запросе. Вот базовая структура папок для проекта:
my_input/
/request.json
/array.json
my_python/
/class.py
request.json содержит данные «place: 1» и «trait: 3» и имеет следующий вид:
{
"metadata": {
"id": "request",
},
"data": {
"place": [
"1"
],
"trait": [
"3"
]
}
}
array.json имеет 2 подмассива, locationArray и measurementArray; в locationArray мы видим, что место 1 связано с графиками 2 и 3:
{ "data":{
"measurementArray": {
"headers": ["plot","trait","value"],
"data": [
[1, 3, 2.7],
[2, 2, 1.8],
[3, 3, 3.6]
],
"locationArray": {
"headers": ["place","plot"],
"data": [
[1,2],
[3,4],
[1,3]
],
}}}
Затем мы фильтруем графики 2 и 3, где «признак: 3». В этом примере он вернет только одну строку из массива измерений, потому что только одна строка, которая была на графике 2 или 3, имела признак 3:
[3,3,3.6]
Как я мог бы написать класс для анализа запроса json, а затем отфильтровать массив во втором JSON? В настоящее время у меня есть только пустой класс.
Большое спасибо за рассмотрение этого вопроса!
Ответ №1:
Я не уверен, работает ли это
class my_input:
def __init__(self,my_request, my_array):
self.my_request = my_request
self.my_array = my_array
def get_places(self):
return self.my_request['data']['place']
def get_traits(self):
return self.my_request['data']['trait']
def get_associated_plots(self,places):
associated_plots = []
place_st = set(places)
for current_data in self.my_array['data']['measurementArray']['locationArray']['data']:
if str(current_data[0]) in place_st:
associated_plots.append(current_data[1])
return associated_plots
def get_rows(self,associated_plots,traits):
triats_st = set(traits)
associated_plots_st = set(associated_plots)
for current_data in self.my_array['data']['measurementArray']['data']:
rows = []
if current_data[0] in associated_plots_st and str(current_data[1]) in triats_st:
rows.append(current_data)
return rows