我正在使用Yahoo Placemaker API,它根据输入提供不同的json结构。 简单的json文件如下所示:
{
'document':{
'itemDetails':{
'id'='0'
'prop1':'1',
'prop2':'2'
}
'other':{
'propA':'A',
'propB':'B'
}
}
}
当我想访问itemDetails时,我只需编写json_file ['document'] ['itemDetails']。
但是当我得到更复杂的回应时,例如
{
'document':{
'1':{
'itemDetails':{
'id'='1'
'prop1':'1',
'prop2':'2'
}
},
'0':{
'itemDetails':{
'id'='0'
'prop1':'1',
'prop2':'2'
},
'2':{
'itemDetails':{
'id'='1'
'prop1':'1',
'prop2':'2'
}
'other':{
'propA':'A',
'propB':'B'
}
}
}
解决方案显然不起作用。
我使用id,prop1和prop2来创建对象。
在不写json_file ['document'] ['0'] ['itemDetails']的情况下,在第二种情况下自动访问itemDetails的最佳方法是什么?
答案 0 :(得分:1)
如果我理解正确,您希望遍历所有json_file['document']['0']['itemDetails']
,json_file['document']['1']['itemDetails']
,......
如果是这样的话,那么:
item_details = {}
for key, value in json_file['document']:
item_details[key] = value['itemDetails']
或者,单行:
item_details = {k: v['itemDetails'] for k, v in json_file['document']}
然后,您可以item_details['0']
,item_details['1']
,...
注意:您可以使用int(key)
或int(k)
来抑制0和1附近的单引号。
修改强> 如果您想要无缝访问这两种情况(无论是一个结果还是多个结果),您可以检查:
if 'itemDetails' in json_file['document']:
item_details = {'0': json_file['document']['itemDetails']}
else:
item_details = {k: v['itemDetails'] for k, v in json_file['document'] if k != 'other'}
然后循环遍历item_details
词典。