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

Python解析列表字典混合嵌套JSON报TypeError的取值方案

报错原因

TypeError: list indices must be integers or slices, not str 由取值方式和数据结构不匹配导致:你提供的JSON中data、rows、dimensions、metrics字段的值均为列表类型,列表仅支持整数索引、切片取值,无法直接传入字符串键访问。
原代码中itemlist['data']['rows']的写法,是在对itemlist['data']这个列表直接用'rows'字符串键取值,因此触发报错。

正确解析方法

先明确示例JSON的层级对应关系:

  1. 最外层是字典,取data字段得到列表,取列表第0个元素,才能拿到带rows字段的字典
  2. 取rows字段得到列表,取列表第0个元素,才能拿到带dimensions、metrics字段的字典
  3. 再从两个字段对应的列表中,按索引取目标值即可

针对你给出的示例数据,直接取值的代码如下:

import json

itemlist = json.loads(r.text)
# 逐层穿透列表层拿到目标行数据
row_content = itemlist['data'][0]['rows'][0]
# 提取dimensions下的title1
title_val = row_content['dimensions'][0]['value']
print(repr(title_val))
# 提取metrics下索引为3的123123
num_val = row_content['metrics'][3]['value']
print(repr(num_val))

运行后输出完全符合预期:

'title1'
'123123'

如果实际业务场景中data、rows下有多条数据,不是单条,可以加循环遍历所有列表元素,避免硬编码索引导致的取值错误,参考写法:

import json

itemlist = json.loads(r.text)
for data_block in itemlist['data']:
    for row_block in data_block['rows']:
        # 遍历提取维度值
        for dim_item in row_block['dimensions']:
            if 'value' in dim_item:
                print(repr(dim_item['value']))
        # 遍历提取指标值,可根据业务规则加判断筛选目标值
        for metric_item in row_block['metrics']:
            if 'value' in metric_item and metric_item['value'] == '123123':
                print(repr(metric_item['value']))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:30:46