Python访问复杂JSON数据触发TypeError错误的排查与解决咨询
解决TypeError: list indices must be integers or slices, not str的问题
我来帮你拆解问题根源,以及对应的修复方案:
错误原因分析
你遇到的这个报错,核心是没分清JSON结构里列表([])和字典({})的访问规则:
- 外层的
data是一个列表(用[]包裹),列表只能用整数下标(比如data[0])访问元素,不能直接用字符串键(比如"portfolio_item_list")去索引。 - 其次,
portfolio_item_list本身也是一个列表,里面才是包含stats的字典对象,你需要遍历这个列表里的每一项,再去访问stats内容。
修正后的代码
# 先拿到data列表里的第一个协议数据(字典类型) protocol_data = data[0] # 遍历portfolio_item_list中的每一项投资组合 for portfolio_item in protocol_data["portfolio_item_list"]: # 取出当前项的统计数据 stats = portfolio_item["stats"] print(stats["asset_usd_value"], stats["debt_usd_value"], stats["net_usd_value"])
如果想要更简洁的写法,也可以直接链式访问:
for portfolio_item in data[0]["portfolio_item_list"]: stats = portfolio_item["stats"] print(stats["asset_usd_value"], stats["debt_usd_value"], stats["net_usd_value"])
运行结果验证
执行这段代码后,会输出你需要的投资组合统计数据:
20.258310032314448 0.03452806117121324 20.223781971143236
小技巧
以后碰到复杂JSON结构时,可以用print(json.dumps(data, indent=2))把数据格式化打印出来,或者把JSON内容复制到格式化工具里展开查看,这样能更直观地区分列表和字典,避免索引错误。
内容的提问来源于stack exchange,提问作者M3thuselah.
相关产品推荐
相关产品推荐

