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

如何从嵌套JSON文件读取指定键值存入Pandas后导出?

问题修复方案

报错原因

  • 键名匹配错误:你描述的结构里测试项对应的是Value键,但是代码里写的是RESULTS,键名不匹配导致取值路径错误。
  • 类型不匹配报错:TypeError: list indices must be integers or slices, not str说明你当前访问的层级是列表类型,不是预期的字典类型,大概率是MEASUREMENTS节点或者测试名称对应的值被列表包裹,需要先取列表内的元素再访问字典键。
  • 变量命名不规范:代码里用type作为变量名,覆盖了Python内置的type()函数,可能引发隐藏问题。

修复步骤

  1. 先确认层级结构:拿到data['TESTS']['MEASUREMENTS']后可以先打印print(type(measurements), measurements),确认该节点是字典还是被列表包裹。
  2. 修正取值键名为实际存在的Value。
  3. 简化循环逻辑,不需要额外维护索引计数器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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:36:03