Python转换含多根JSON对象的文件至CSV时遇JSONDecodeError的解决方法(无需修改原JSON)
解决多独立JSON对象转CSV的问题
这个报错的根源很清晰:你的JSON文件包含多个独立的JSON对象(而非一个统一的数组或单个对象),但标准的json.load()只能解析单一的JSON结构。当它读完第一个对象后,遇到第二个{就会判定为多余数据,抛出JSONDecodeError。
下面是无需修改原文件的解决方案,核心是利用json.JSONDecoder().raw_decode()方法逐个解析每个独立的JSON对象,再合并数据写入CSV:
import csv import json # 定义文件路径 input_path = "C:\\python\\SampleJSON.json" output_path = "workspaceExcelDemo.csv" # 读取整个文件内容 with open(input_path, 'r', encoding='utf-8') as file: raw_data = file.read() # 初始化JSON解码器,用于逐个解析独立对象 decoder = json.JSONDecoder() current_pos = 0 all_projects = [] # 循环解析所有JSON对象 while current_pos < len(raw_data): try: # 解析当前位置的JSON对象,返回对象和下一个对象的起始位置 json_obj, current_pos = decoder.raw_decode(raw_data, current_pos) # 将当前对象的content列表合并到总列表中 all_projects.extend(json_obj["content"]) # 跳过对象之间的空白字符(换行、空格等) while current_pos < len(raw_data) and raw_data[current_pos].isspace(): current_pos += 1 except json.JSONDecodeError as e: print(f"解析过程中遇到错误: {e}") break # 写入CSV文件 with open(output_path, "w", encoding="utf-8", newline='') as file: csv_writer = csv.writer(file) # 写入表头(这里扩展了一些字段,你可以根据需求调整) csv_writer.writerow(["id", "name", "rsid", "description", "type", "owner_id", "created"]) # 遍历所有项目数据写入行 for project in all_projects: # 安全提取owner的id,避免键不存在的情况 owner_id = project["owner"]["id"] if "owner" in project and "id" in project["owner"] else "" csv_writer.writerow([ project.get("id", ""), project.get("name", ""), project.get("rsid", ""), project.get("description", ""), project.get("type", ""), owner_id, project.get("created", "") ])
代码说明:
raw_decode()方法会从指定位置开始解析JSON对象,并返回解析后的对象和下一个未解析字符的位置,完美适配多个独立JSON对象的场景- 我们跳过对象之间的空白字符,避免因为换行、空格导致解析失败
- 使用
get()方法和条件判断提取字段,避免因字段缺失引发KeyError - 合并所有
content列表后统一写入CSV,保证数据完整性
内容的提问来源于stack exchange,提问作者user8785827
相关产品推荐
相关产品推荐

