0

我正在使用 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 的最佳方法是什么?

4

1 回答 1

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)注意:您可以使用或取消 0 和 1 周围的单引号int(k)

编辑: 如果您想无缝访问这两种情况(无论是一个结果还是多个),您可以检查:

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字典。

于 2012-05-04T21:06:49.323 回答