У меня есть вложенный JSON, структурированный следующим образом. Для каждого json я хочу итеративно извлекать данные из разных уровней - «StreamId» на первом уровне, затем в «Summary_breakdown» извлекать «TaskID» (т.е. TaskID_1, TaskID_2), а внутри каждого «TaskID» извлекать все элементы, кроме «tools_items»поскольку он слишком длинный и может вызвать проблемы внутри фрейма данных.
Я хочу записать его обратно в виде словаря и в конечном итоге проанализировать его в фрейме данных.
{
"success": true,
"resource": {
"StreamId": "xyz",
"Summary_Measures": {
"Summary_Report": {
"Total_Cost": 7000,
"Total_hours": 6087,
"Summary_breakdown": {
"TaskID_1": {
"Task_details": "abc",
"Task_cost": 300,
"Task_hours": 87,
"tools_items": "an_extremely_long_string"
},
"TaskID_2": {
"Task_details": "defgyh",
"Task_cost": 400,
"Task_hours": 6000,
"tools_items": "another_extremely_long_string"
}
}
}
},
}
}
Мне удалось сгенерироватьсписок URL-адресов и сохраните ответы json в списке, но я не могу извлечь слой и параметр «Task_ID» внутри каждого «Task_ID» во второй части моего сценария, начиная с «responseitem». Я пытался обойти слой «Task_ID», но код все еще не работает. Любые решения и предложения приветствуются!
import json
import pandas as pd
from urllib.request import urlopen
stream_id = ['sdfhef', 'VVqdhi']
myurl_link = []
for id in stream_id:
endpoint = "https://~/%s/~" % id
myurllink.append(endpoint)
myjslist = []
for link in myurl_link:
g = urlopen(link).read().decode('UTF-8')
g_resp = json.loads(g)
myjslist.append(g_resp)
responseitem = []
for item in myjslist:
stream = item['resource']['StreamId']
taskdetails = item['resource']['Summary_Measures']['Summary_Report']['Summary_breakdown'][0]['Task_details']
taskcost = item['resource']['Summary_Measures']['Summary_Report']['Summary_breakdown'][0]['Task_cost']
taskhours = item['resource']['Summary_Measures']['Summary_Report']['Summary_breakdown'][0]['Task_hours']
responseitem.append({'taskdetails':taskdetails, 'taskcost':taskcost, 'taskhours': taskhours})
with open('responseitem.json', 'a') as f:
json.dump(responseitem, f)
f.write("\n")