我有一个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
我做错了什么?
答案 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'属性。