【问题标题】:Getting a specific element from a JSON string从 JSON 字符串中获取特定元素
【发布时间】:2013-09-17 20:52:44
【问题描述】:

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

{"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”以上的元素我需要做的是:

我需要获取所有值的列表,其中包含 id 的所有值。不过我不知道该怎么做,我试过做这样的事情:

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

但我收到一条错误消息:

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

我做错了什么?

【问题讨论】:

  • Accessing JSON elements 的可能重复项
  • 您是否使用json.loads将字符串转换为python原生数据?
  • 您没有做错任何事情,但可能并非所有数据项都有一个result,即字典列表。也许您的results 之一是字符串列表或字符串。
  • 对于您发布的示例 JSON,您的代码正常。那么问题在于,错误表明 my_dict['results'] 值不是来自该 JSON 数据块。

标签: python json


【解决方案1】:

你没有做任何明显错误的事情。您的数据包括不适合 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'] 元素时,错误正确地告诉您列表索引(字符串是字符列表)必须是整数。

【讨论】:

  • null 值是完全合法的 JSON。 sn-p 不是 Python 代码,而是 JSON 数据。
【解决方案2】:

您似乎还没有使用 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 的列表。 在此处使用列表推导以获得更快的速度和更少的代码行数。它还确保结果字典在尝试访问它之前具有“id”属性。

【讨论】:

  • 如果 OP 没有加载数据,my_dict['result'] 也不存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多