You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3多层级访问JSON元素报错TypeError,求解决方案

问题分析与解决

错误原因

你这段代码的核心问题是遍历对象搞错了:
returned_data['data']是一个字典,直接循环它的话,拿到的是字典的键(比如'account_sid'、'sites'这类字符串),而不是你要的站点数据。所以当你用device['sites']时,本质是在给字符串加索引,自然会报string indices must be integers的错误。

另外,你的访问路径里的sites、devices、instruments都是数组(列表),不能直接用[]一步到位取值,必须逐层循环遍历每个数组里的元素。

修正后的代码

import requests
import json

response = requests.post(URL)
# 注:requests自带json解析方法,直接用response.json()更简洁,不需要手动转码
returned_data = response.json()

devices = dict()
# 第一步:拿到sites列表
for site in returned_data['data']['sites']:
    # 第二步:遍历当前站点下的devices列表
    for device in site['devices']:
        # 第三步:遍历当前设备下的instruments列表
        for instrument in device['instruments']:
            # 把instrument的name和serial存入字典
            device_name = instrument['name']
            device_id = instrument['serial']
            devices[device_name] = device_id

print(devices)

补充说明

  • requests库的响应对象直接提供了.json()方法,可以自动解析JSON数据,不需要手动做encode().decode('utf-8-sig')这一步,更简洁可靠。
  • 因为instruments里的每个元素都是独立的对象,所以必须逐层循环嵌套,才能拿到每个instrument的serial和name。
  • 如果存在多个站点、多个设备,这段代码也能自动遍历所有情况,不会遗漏数据。

内容的提问来源于stack exchange,提问作者jabroni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:55:42