繁体   English   中英

Python 和 JSON 错误 - TypeError:字符串索引必须是整数

[英]Python and JSON Error - TypeError: string indices must be integers

我在解析 JSON 响应时收到错误 TypeError:字符串索引必须是整数。 我不明白我做错了什么,响应是一本字典..

从可测试的免费 REST API 获取相同错误的代码示例:

import requests

response = requests.get('http://services.groupkt.com/state/get/IND/all')

for states in response.json():
    print ('{} {}'.format(states['name'], states['capital']))

迭代字典时,就是迭代它的键。 该字典的(唯一)顶级键是 "RestResponse" 并且您的代码转换为: "RestResponse"["name"] 由于它是一个字符串,因此 Python 需要整数索引(如用于切片的“RestResponse”[3])。

如果您调查结果字典的结构,您将看到您想要的结果在response.json()["RestResponse"]["result"]

for states in response.json()["RestResponse"]["result"]:
    print ('{} {}'.format(states['name'], states['capital']))

出去:

Andhra Pradesh Hyderabad, India
Arunachal Pradesh Itanagar
Assam Dispur
Bihar Patna
Chhattisgarh Raipur
...

您的响应不是数组,而是对象。
代码中的 for 循环实际上是迭代dict (JSON 对象的解析版本)中的键。

当您迭代response.json()您只是在迭代 str RestResponse ,它是您的 dict 中的第一个元素。

因此,您应该按如下方式更改代码:

for states in response.json()['RestResponse']['result']:
    print ('{} {}'.format(states['name'], states['capital']))

然后,您的输出将是:

Andhra Pradesh Hyderabad, India
Arunachal Pradesh Itanagar
Assam Dispur
Bihar Patna
Chhattisgarh Raipur
Goa Panaji
Gujarat Gandhinagar
Haryana Chandigarh
Himachal Pradesh Shimla
...

您想要的结果在"RestResponse" => "result"

"RestResponse" : {
    "messages" : [...]
    "result" : [ {}, {}, {} ... ]
}

因此,要获得状态,您应该获得result数组的值。

request = requests.get('http://services.groupkt.com/state/get/IND/all')
response = request.json()
states = response["RestResponse"]["result"]

现在你可以这样做:

for state in states:
    print ('{} {}'.format(state['name'], state['capital']))

输出应该如预期的那样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM