如何从嵌套JSON文件读取指定键值存入Pandas后导出?
问题修复方案
报错原因
- 键名匹配错误:你描述的结构里测试项对应的是
Value键,但是代码里写的是RESULTS,键名不匹配导致取值路径错误。 - 类型不匹配报错:
TypeError: list indices must be integers or slices, not str说明你当前访问的层级是列表类型,不是预期的字典类型,大概率是MEASUREMENTS节点或者测试名称对应的值被列表包裹,需要先取列表内的元素再访问字典键。 - 变量命名不规范:代码里用
type作为变量名,覆盖了Python内置的type()函数,可能引发隐藏问题。
修复步骤
- 先确认层级结构:拿到
data['TESTS']['MEASUREMENTS']后可以先打印print(type(measurements), measurements),确认该节点是字典还是被列表包裹。 - 修正取值键名为实际存在的
Value。 - 简化循环逻辑,不需要额外维护索引计数器
i,直接遍历测试名称即可。
修复后可运行代码
import json import pandas as pd # 此处替换为你所有JSON文件的路径列表 json_files = ["test1.json", "test2.json"] # 存储所有文件提取结果的列表 all_records = [] for file in json_files: with open(file, encoding="utf-8") as f: data = json.load(f) # 提取时间信息 date = data["INFO"]["TIME"][0:10] time = data["INFO"]["TIME"][11:] measurements = data["TESTS"]["MEASUREMENTS"] # 如果MEASUREMENTS是列表,解开注释下行取第一个元素即可 # measurements = data["TESTS"]["MEASUREMENTS"][0] test_names = list(measurements.keys()) # 单条记录结构,包含时间和所有测试值 record = {"date": date, "time": time} for test_name in test_names: test_detail = measurements[test_name] # 如果测试详情是列表,解开注释下行取第一个元素即可 # test_detail = test_detail[0] record[test_name] = test_detail["Value"] all_records.append(record) # 转DataFrame导出为CSV df = pd.DataFrame(all_records) df.to_csv("test_output.csv", index=False, encoding="utf-8-sig")
内容的提问来源于stack exchange,提问作者WICHELON
相关产品推荐
相关产品推荐

