Python 如何将脚本要解析的JSON键存储在另一个JSON中?
假设我有一个名为jsondata.JSON的JSON:Python 如何将脚本要解析的JSON键存储在另一个JSON中?,python,json,python-3.x,Python,Json,Python 3.x,假设我有一个名为jsondata.JSON的JSON: { "apiURL": [ { "name":"Target", "url":"https://redsky.target.com/v2/plp/collection/13562231,14919690,13728423,14919033,13533833,13459265,14917313,13519319,13533837,14919691,13479115,47778362,15028201,51
{
"apiURL": [
{
"name":"Target",
"url":"https://redsky.target.com/v2/plp/collection/13562231,14919690,13728423,14919033,13533833,13459265,14917313,13519319,13533837,14919691,13479115,47778362,15028201,51467685,50846848,50759802,50879657,13219631,13561421,52062271,14917361,51803965,13474244,13519318?key=eb2551e4accc14f38cc42d32fbc2b2ea&pricing_store_id=2088&multichannel_option=basics&storeId=321"
},
{
"name":"Safeway",
"url":"https://shop.safeway.com/bin/safeway/product/aemaisle?aisleId=1_23_2&storeId=1483"
}
]
}
我想告诉我的脚本从url包含的API检索数据,如下所示:
# Load JSON containing URLs of APIs of grocery stores
with open(json_data, 'r') as data_f:
data_dict = json.load(data_f)
# Organize API URLs
for apiurl in data_dict['apiURL']:
responses.append('')
responses[index] = requests.get(apiurl['url'])
responses[index].raise_for_status()
storenames.append(apiurl['name'])
index += 1
first_target_item = responses[0].json()['search_response']['items']['Item'][0]['title']
first_safeway_item = responses[1].json()['productsinfo'][0]['description']
如您所见,我当前的实现要求我手动输入脚本,从每个API解析哪个键(最后两行)。我希望最终能够从动态数量的杂货店中检索信息,但每个网站都将其商品的数据存储在API的不同键中
我如何能够自动化该过程(例如,将要解析的密钥存储在jsondata.json中),这样我就不必每次添加新的杂货店时都更新脚本?如果您可以修改jsondata.json,您可以保留如下数组:
{
"name":"Target",
"accessKeys": ["search_response", "items", "Item", "0", "title"],
"url":"https://redsky.target.com/v2/plp/collection/13562231,14919690,13728423,14919033,13533833,13459265,14917313,13519319,13533837,14919691,13479115,47778362,15028201,51467685,50846848,50759802,50879657,13219631,13561421,52062271,14917361,51803965,13474244,13519318?key=eb2551e4accc14f38cc42d32fbc2b2ea&pricing_store_id=2088&multichannel_option=basics&storeId=321",
}
在python代码中:
keys=["search_response", "items", "Item", "0", "title"] #apiUrl['accessKeys']
target_item=responses[0].json()
for i in target_item:
target_item=target_item[i]
你可以实现更多的自动化
def get_keys(data, keys):
for key in keys:
data=data[key]
return data
items=[]
for index, apiurl in enumerate(data_dict['apiURL']):
responses.append('')
responses[index] = requests.get(apiurl['url'])
responses[index].raise_for_status()
storenames.append(apiurl['name'])
items.append(get_keys(responses[index].json(), apiUrl['accessKeys']))
如何让脚本查看动态数量的键?在我的示例中,Target有5个访问密钥,Safeway有3个。我很清楚,json文件中分别有5个和3个键的数组,但是我的Python脚本如何知道要搜索多少个键呢?