如何访问POST请求返回的JSON数据?API数据访问报错求助
解决
list indices must be integers or slices, not str错误的思路 这个错误指向很明确——你正在尝试用字符串索引一个列表,说明返回的JSON结构和你预想的字典嵌套逻辑不一样,某个层级其实是列表而非字典。咱们一步步来排查解决:
第一步:先搞清楚返回数据的真实结构
别着急直接索引取值,先把返回的完整数据结构打出来,一目了然就能找到问题所在:
import json resp = post(url = endpoint_url, data = data, headers = headers) data_for_process = resp.json() # 先确认最外层数据类型 print(type(data_for_process)) # 格式化打印完整结构,方便查看层级关系 print(json.dumps(data_for_process, indent=2))
举个常见的错误场景例子,你可能会看到类似这样的返回结构:
[ { "pages": [ { "keyValuePairs": { "key": "你需要的目标值" } } ] } ]
这种情况下,data_for_process本身是个列表,pages也是个列表,你直接用data_for_process['pages']自然会报错——列表只能用整数索引,正确的索引方式应该是data_for_process[0]['pages'][0]['keyValuePairs']['key']。
第二步:根据真实结构修正索引逻辑
根据打印出来的实际结构,调整你的索引步骤:
- 如果最外层是列表:先通过整数索引取对应元素,比如
data_for_process[0] - 如果某个子节点是列表:同样用整数索引定位到具体元素,比如
pages[0]
给你一个修正后的代码示例(对应上面的示例结构):
resp = post(url = endpoint_url, data = data, headers = headers) data_for_process = resp.json() # 逐层定位:先取外层列表第一个元素,再取pages列表第一个元素,最后拿到key对应的值 target_value = data_for_process[0]['pages'][0]['keyValuePairs']['key'] print(target_value)
小技巧:分步排查层级类型
如果数据结构比较复杂,你可以分步打印每个层级的类型,精准定位问题点:
print(type(data_for_process)) # 确认最外层是列表还是字典 print(type(data_for_process[0])) # 如果是列表,查看第一个元素的类型 print(type(data_for_process[0]['pages'])) # 确认pages节点的类型
这样就能快速找到哪个层级是列表,调整索引方式就能解决问题啦~
内容的提问来源于stack exchange,提问作者TJ Young




