You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何访问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

火山引擎 最新活动