在Python中从json获取多个键

时间:2017-07-26 18:33:54

标签: python json python-2.7

我在文件中有以下json结构:

[
{ "Date": "timevalue", "Org": "b4256282", "Referer": "somevalue" },
{ "Date": "timevalue", "Org": "b4257482", "Referer": "somevalue" },
{ "Date": "timevalue", "Org": "b4253345", "Referer": "somevalue" },
....
]

我想提取所有的组织。

我的代码是:

import json

jdata = json.loads(str_of_above_json)
for orgs in jdata['Org']:
     print(orgs)

但是这段代码不起作用......我得到以下错误消息

  

TypeError:list indices必须是整数,而不是str

有谁能让我知道我做错了什么?

4 个答案:

答案 0 :(得分:2)

您需要遍历列表中的每个字典,然后依次使用dict索引来索引dict。对于列表中的每个字典,

  1. 获取i 字典
  2. 在i 词典中获取与Org相关联的值
  3. 从(2)
  4. 打印所述值

    在代码中,这是

    for dict_ in jdata:
        org = dict_['Org']
        print(org)
    

    但是,我们拥有列表理解的强大功能,因此上面的代码可以更简洁地表示,

    jdata = json.loads(str_of_above_json)
    orgs = [x['Org'] for x in jdata]      
    print(orgs)       
    

    为什么您当前的代码没有工作?
    您执行jdata['Org'],但[...]是dict索引操作,这将导致错误,因为jdata列表

答案 1 :(得分:2)

请记住,您的数据作为Python结构加载后将成为字典列表。为了简单起见,它只是:

[{...}, {...}, {...}]

此处的关键字是列表。因此,你的for循环将/应该迭代列表,在每次迭代时为你提供每个字典。

此时,您可以访问'组织'键。

所以当你这样做时:

for orgs in jdata:
    print(orgs) # each dictionary

此时,您可以现在访问字典中的Org键:

for orgs in jdata:
    print(orgs) # each dictionary
    print(orgs['Org']) # The value of 'Org' in each dictionary

答案 2 :(得分:0)

import json

jdata = json.loads(str_of_above_json)
for orgs in jdata:
    print(orgs["Org"])

你需要遍历列表[] 然后打印每个数据的“组织”部分。

答案 3 :(得分:0)

所有其他答案都是正确的,将解决您当前的问题。

但如果您使用这样的结构操作很多,您可能会发现包plucky有用(完全披露:我是该包的作者)。

例如(假设您的jdata已加载):

>>> import plucky
>>> plucky.plucks(data, '.Org')
['b4256282', 'b4257482', 'b4253345']

或:

>>> plucky.pluckable(data).Org
['b4256282', 'b4257482', 'b4253345']