【问题标题】:Accessing parsed JSON objects访问解析的 JSON 对象
【发布时间】:2020-12-08 22:55:36
【问题描述】:
data = '{"abc":null, "data":[{"admin":0, "customer":"no", "info":{"id":76, "type":"guest"}}, {"admin":0, "customer":"no", "info":{"id":73, "type":"member"}}]}'

a = json.loads(data)
print(a["data"]["info"]["type"])

Output: TypeError: list indices must be integers or slices, not str

我需要知道如何解决这个问题,输出为:["guest", "member"]

编辑::谢谢大家的解答,我解决了问题,但是我正在努力学习,请问如果数据包含空值怎么办?

例子:

import json

data = '{"abc":null, "data":[{"admin":0, "customer":"no", "info":{"id":76, "type":"guest"}}, {"admin":0, "customer":"no", "info":{"id":73, "type":"member"}}, {"admin":0, "customer":"no", "info":null}]}'

a = json.loads(data)
print([t["info"]["type"] for t in json.loads(data)["data"]])

Output: TypeError: 'NoneType' object is not subscriptable

【问题讨论】:

  • @Carcigenicate 那是什么?以及我该如何解决?
  • 你忘了在表达式中提到aa["data"][0]["info"]["type"].
  • 您问题中的 data 字符串是无效的 JSON 格式,json.loads() 产生以下错误:json.decoder.JSONDecodeError: Expecting ',' delimiter: line 1 column 93 (char 92)。请edit您的问题并解决此问题。

标签: python arrays json python-3.x parsing


【解决方案1】:

试试这个,JSON文本语法有错误我已经纠正了。

import json
data = '{"abc":null, "data":[{"admin":0, "customer":"no", "info":{"id":76, "type":"guest"}}, {"admin":0, "customer":"no", "info":{"id":73, "type":"member"}}, {"admin":0, "customer":"no", "info":null}]}'
print([(t["info"]["type"] if t["info"] else None) for t in json.loads(data)["data"]])

【讨论】:

  • 您好先生,您能检查一下编辑并帮我解决这个新问题吗?谢谢。
【解决方案2】:

我找到了一个可以为您提供所需结果的解决方案。由于您在此过程中更改了代码,因此我为您的原始帖子以及您提供的后续帖子提供了解决方案。

import json

data = '{"abc":null, \
         "data":[{"admin":0, "customer":"no", \
                  "info":{"id":76, "type":"guest"}}, \
                  {"admin":0, "customer":"no"}, \
                  {"info":{"id":73, "type":"member"}}]}'
                  # Added {} around "admin":0, "customer":"no"
                  # Added {} around "info":{"id":73, "type":"member"}
ans = json.loads(data)
result1 = ans['data'][0]['info']['type']
result2 = ans['data'][2]['info']['type']
print([result1, result2])
# OUTPUT == ['guest', 'member']

data2 = '{"abc":null, "data":\
         [{"admin":0, "customer":"no", \
           "info":{"id":76, "type":"guest"}}, \
          {"admin":0, "customer":"no", \
           "info":{"id":73, "type":"member"}}]}'

ans2 = json.loads(data2)
result1 = ans2['data'][0]['info']['type']
result2 = ans2['data'][1]['info']['type']
print([result1, result2])
# OUTPUT == ['guest', 'member']

【讨论】:

  • 您好先生,您能检查一下编辑并帮我解决这个新问题吗?谢谢。
【解决方案3】:

原因是根据您的 JSON 数据,您的 JSON 中的“数据”字段是一个集合。所以它在调用它时返回一个集合。因此可以通过遍历集合来访问“信息”字段。

for k in a["data"]:
  print(k["info"]["type"])

上面将打印“类型”字段的值。

您还可以使用特定索引访问“类型”字段:

a["data"][0]["info"]["type"]

【讨论】:

  • 您好先生,您能检查一下编辑并帮我解决这个新问题吗?谢谢。
【解决方案4】:

这里是一块一块的:

>>> a
{'abc': None, 'data': [{'admin': 0, 'customer': 'no', 'info': {'id': 76, 'type': 'guest'}}, {'admin': 0, 'customer': 'no', 'info': {'id': 73, 'type': 'member'}}]}
>>> a['data']
[{'admin': 0, 'customer': 'no', 'info': {'id': 76, 'type': 'guest'}}, {'admin': 0, 'customer': 'no', 'info': {'id': 73, 'type': 'member'}}]
>>> [d['info'] for d in a['data']]
[{'id': 76, 'type': 'guest'}, {'id': 73, 'type': 'member'}]
>>> [d['info']['type'] for d in a['data']]
['guest', 'member']

【讨论】:

  • 您好先生,您能检查一下编辑并帮我解决这个新问题吗?谢谢。
  • 如果您有新问题,请发布新问题。
猜你喜欢
  • 2014-08-23
  • 2020-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
  • 2018-07-18
  • 1970-01-01
相关资源
最近更新 更多