【问题标题】:Can't access keys in JSON output: string indices must be integers无法访问 JSON 输出中的键:字符串索引必须是整数
【发布时间】:2019-07-05 11:36:39
【问题描述】:

我正在努力尝试从 JSON 输出中提取密钥。

请求输出这个JSON:

for (;;);{"__ar":1,"payload":[{"id":"USERID","name":"USERNAME"}]}

此时我摆脱了“for (;;);”为了得到一个有效的 JSON:

json_header = (data.text).replace('for (;;);', '')

现在我需要打印 USERID 和 USERNAME。这是我尝试的:

json_data = json.dumps(json_header)
json_objects = json.loads(json_data)

print(json_objects['payload']['id'])

但我明白了:

TypeError:字符串索引必须是整数

你能帮我修改一下代码吗?

【问题讨论】:

  • print(json_objects['payload'][0]['id'])

标签: python json


【解决方案1】:

我不确定json_headerjson_data 之间的关系是什么。 但是如果你的 json 是

{"__ar":1,"payload":[{"id":"USERID","name":"USERNAME"}]}

所以payload 是一个字典数组。要访问数组中的第一个(也是唯一一个)dict,您可以:

payload = json_objects['payload']
first_elemet = payload[0]
id = first_element['id']
print(id)

或一起,完成并准备执行:

import json
json_string = '{"__ar":1,"payload":[{"id":"USERID","name":"USERNAME"}]}'
json_objects = json.loads(json_string)
print(json_objects['payload'][0]['id'])

顺便说一句:带有 for 循环的原始数据看起来很吓人。如果这应该是 JSON,那至少很奇怪,并且在您调用的任何后端中看起来都像是一个错误。

【讨论】:

  • 感谢您这么快的回答。不幸的是,它仍然给我同样的错误。我知道代码很可怕。事实上,它实际上不应该被请求调用......
  • 我以我理解您的代码的方式对其进行了测试(请参阅更新的答案)。如果这不起作用,请粘贴完整的可运行的 sn -p 以重现错误。
猜你喜欢
  • 2019-08-15
  • 2020-06-24
  • 1970-01-01
  • 2022-07-22
  • 2020-01-07
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多