Python解析JSON提取字段报TypeError列表索引错误如何解决
问题解决方法
错误根源
你遇到的TypeError: list indices must be integers or slices, not str报错,是因为i['data']['rows']对应的数据类型是列表(数组),不能直接用字符串'dimensions'作为索引访问,需要先遍历rows列表中的每一个元素,再提取目标字段。
对照你提供的JSON结构,层级关系如下:
- 根节点是列表,每个元素包含
data字段 data下的rows是所有数据行的列表- 每个
row元素包含dimensions(城市列表)和metrics(指标列表) metrics下的每个元素包含values(指标值列表)
正确提取代码
以下代码可完成dimensions和values的提取,同时支持直接转换为pandas DataFrame:
import json import pandas as pd with open('test.json', encoding='utf-8') as f: raw_json = json.load(f) # 存储提取结果的列表 extract_result = [] for report in raw_json: rows = report['data']['rows'] # 遍历每一行数据 for row in rows: # 提取dimensions中的城市名 city = row['dimensions'][0] # 提取values中的用户数 user_num = int(row['metrics'][0]['values'][0]) extract_result.append({ "ga:city": city, "ga:users": user_num }) # 打印验证可按需开启 # print(f"城市:{city},用户数:{user_num}") # 转换为DataFrame做后续处理 df = pd.DataFrame(extract_result) # 打印前5行验证 print(df.head())
内容的提问来源于stack exchange,提问作者gustavo matteo
相关产品推荐
相关产品推荐

