从JSON字符串中获取特定元素

时间:2013-09-17 20:52:45

标签: python json

我有一个JSON字符串,我进入python看起来像这样:

{"count": 100, 
 "facets": null, 
 "previous_page": null, 
 "results": [{"updated_at": "2013-09-17T13:45:13Z", "test_id": 194037042, "customer_id":       
              203793326, "id": 1954182}]

还有更多元素,但这只是我需要的一小部分。基本上,结果有一个包含100个词典的列表,其中包含“updated_at,test_id,customer_id,id”之上的元素。我需要做的是以下内容:

我需要获取JUST id的所有值的列表。我不知道如何解决这个问题,我尝试过这样的事情:

for i in my_dict['results']:
    print i['id']

但是我收到一条错误消息:

print i['id']
TypeError: string indices must be integers

我做错了什么?

2 个答案:

答案 0 :(得分:0)

你没有做任何明显错误的事情。您的数据包含'null'元素,这些元素不是正确的python。这很好。

my_dict = {"count": 100, 
 "facets": None, 
 "previous_page": None, 
 "results": [{"updated_at": "2013-09-17T13:45:13Z", "test_id": 194037042, "customer_id": 203793326, "id": 1954182}]
}

for i in my_dict['results']:
    print i['id']

你所犯的错误暗示你的一个列表项是一个字符串,当你试图获得['id']元素时,错误正确地告诉你列表索引(一个字符串是一个字符列表)必须是整数。

答案 1 :(得分:0)

看起来你没有用json.loads(json_string)将json加载到Python中

即使在你这样做之后,你的“结果”字典实际上也将成为一系列字样。

试试这个:

import json

json_str = '{"count": 100, "facets": null, "previous_page": null, "results": [{"updated_at": "2013-09-17T13:45:13Z", "test_id": 194037042, "customer_id": 203793326, "id": 1954182}, {"updated_at": "2013-09-18T13:45:13Z", "test_id": 194037043, "customer_id": 203793327, "id": 1954183}]}'

data = json.loads(json_str)
result_ids = [result['id'] for result in data['results'] if 'id' in result]

<强>输出:

[1954182, 1954183]

此代码将输出包含1954182和1954183的列表。 使用列表推导来获得更快的速度和更少的代码行。它还确保结果dict在尝试访问之前具有'id'属性。