批量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
相关产品推荐
相关产品推荐

