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

批量JSON转CSV时触发JSONDecodeError问题求助

问题分析与代码改进

错误原因

JSONDecodeError: Expecting value: line 1 column 1 (char 0) 通常由以下场景触发:

  • 读取的文件并非有效JSON格式
  • 文件路径拼接错误,打开了不存在的文件或空文件
  • 重复读取同一个文件句柄,文件指针移至末尾后读取空内容

原代码的核心问题

  • 路径拼接错误:os.walk遍历子目录时,直接用file_path + '\\' + file会忽略子目录层级,导致无法正确定位子目录下的文件
  • 嵌套循环冗余:外层遍历files后,内层又重复遍历files,同一个文件句柄被多次读取,第一次读完后指针移至末尾,后续读取空内容触发解析错误
  • 文件句柄未管理:直接open文件后未手动关闭,存在资源泄漏风险
  • CSV写入覆盖:每次to_csv都会覆盖之前的内容,最终仅保留最后一个文件的数据
  • 未过滤文件类型:可能误读非JSON格式文件,引发解析失败

改进后的代码

import os
import json
import pandas as pd

def AnalysisJson():
    file_path = 'my_file'
    header_written = False  # 标记CSV表头是否已写入
    for root, dirs, files in os.walk(file_path):
        for file in files:
            # 仅处理JSON格式文件
            if not file.endswith('.json'):
                continue
            # 拼接完整文件路径,适配不同系统路径分隔符
            full_path = os.path.join(root, file)
            try:
                # 用with语句自动管理文件句柄,避免资源泄漏
                with open(full_path, encoding="utf-8") as f:
                    json_data = json.load(f)
                # 解析嵌套JSON数据
                df = pd.json_normalize(json_data, record_path='label_annotations')
                # 追加写入CSV,表头仅写入一次
                df.to_csv('files.csv', mode='a', index=False, header=not header_written)
                if not header_written:
                    header_written = True
            except json.JSONDecodeError as e:
                print(f"解析文件 {full_path} 失败: {e}")
            except Exception as e:
                print(f"处理文件 {full_path} 失败: {e}")

# 执行转换函数
AnalysisJson()

额外注意事项

  • 检查my_file目录下的所有JSON文件,确保格式合法(可通过本地JSON校验工具验证单个文件)
  • 若JSON文件体积较大,可考虑分批读取解析,避免内存占用过高
  • 可将输出CSV文件名改为更具辨识度的名称,比如label_annotations_converted.csv

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:37:45