我收到错误TypeError:解析JSON响应时字符串索引必须是整数。我不明白我做错了什么,回复是字典..
我的代码示例,它从可测试的免费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']))
答案 0 :(得分:2)
当您遍历字典时,会迭代其键。该词典的(唯一)顶级键是" 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
...
答案 1 :(得分:0)
您的回复不是数组,而是对象
代码中的for循环实际上是在dict
(JSON对象的解析版本)中的键遍历。
答案 2 :(得分:0)
当您在response.json()
上进行迭代时,您只是在str RestResponse
上进行迭代,这是你词典中的第一个元素。
因此,您应该按如下方式更改代码:
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
...
答案 3 :(得分:0)
您想要的结果位于"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']))
输出应符合预期。