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
相关产品推荐
相关产品推荐

