Python转换嵌套JSON为CSV时报JSONDecodeError如何解决?
嵌套JSON转CSV解决方案
1 解决JSONDecodeError报错
该报错核心原因是JSON文件不符合标准解析规则,常见场景对应解决方法:
- 如果是逐行存储单条JSON的JSON Lines格式(非外层包裹
[]的标准JSON数组),不要一次性读取整个文件解析,改为逐行解析:
import json parsed_rows = [] with open("输入文件路径.json", "r", encoding="utf-8") as f: for line in f: stripped_line = line.strip() if not stripped_line: continue try: parsed_rows.append(json.loads(stripped_line)) except json.JSONDecodeError as e: print(f"异常行内容: {stripped_line}\n错误信息: {e}")
- 如果是标准JSON格式报错,打印报错行修正语法即可:常见错误包括字符串用单引号、末尾多余逗号、存在未转义的双引号/换行符。
2 嵌套JSON扁平化转CSV,避免数据存入单列
直接调用pandas内置的json_normalize方法,自动递归提取所有叶子节点为扁平字段,自动兼容整数、字符串混合类型,无需自定义递归逻辑:
import pandas as pd # 直接传入第一步解析得到的JSON对象列表 df = pd.json_normalize(parsed_rows) # 导出CSV,用utf-8-sig编码避免中文乱码 df.to_csv("输出结果.csv", index=False, encoding="utf-8-sig")
如果你的JSON本身是标准外层数组格式,解析成功后直接传入即可:
import json import pandas as pd with open("输入文件路径.json", "r", encoding="utf-8") as f: full_data = json.load(f) df = pd.json_normalize(full_data) df.to_csv("输出结果.csv", index=False, encoding="utf-8-sig")
特殊场景适配
如果JSON中包含数组类型的嵌套字段,需要把数组拆分为多行,在json_normalize中新增record_path参数指定数组路径、meta参数指定需要保留的上层公共字段即可。
内容的提问来源于stack exchange,提问作者user17442909
相关产品推荐
相关产品推荐

