You need to enable JavaScript to run this app. 用Python合并多个JSON文件时遇JSONDecodeError,如何处理冗余记录完成合并
优惠活动
大模型
产品
解决方案
定价
更多

用Python合并多个JSON文件时遇JSONDecodeError,如何处理冗余记录完成合并

报错原因定位
  • 你当前的待合并文件是JSON Lines 逐行存储格式:每个文件内每一行是独立的完整JSON对象,整个文件本身不是单份合法的JSON文档(没有把所有条目包裹在数组结构中)。
  • Python标准库的json.load()仅支持解析“整个文件内容为一个完整JSON值”的场景。当它解析完文件第一行的JSON对象后,检测到后续第二行仍存在未解析的内容,就会抛出JSONDecodeError: Extra data错误。
  • 原代码使用rb/wb二进制模式读写文本类JSON文件,在Python3环境下容易引入编码兼容问题。
修正后可直接运行的代码
import json
import glob

# 用集合存储记录实现自动去重
unique_records = set()

for f in glob.glob("*.json"):
    # 跳过最终生成的合并文件,避免循环读取造成内容重复
    if f == "merged_file.json":
        continue
    with open(f, "r", encoding="utf-8") as infile:
        for line in infile:
            # 跳过空行
            line = line.strip()
            if not line:
                continue
            # 逐行解析单条JSON记录
            record = json.loads(line)
            # 将字典转成可哈希的有序元组存入集合,自动过滤重复内容
            record_key = tuple(sorted(record.items()))
            unique_records.add(record_key)

# 将元组格式的记录转回字典结构
merge_result = [dict(item) for item in unique_records]

# 写入合并后的文件
with open("merged_file.json", "w", encoding="utf-8") as outfile:
    json.dump(merge_result, outfile, ensure_ascii=False, indent=2)
方案效果说明
  • 彻底解决Extra data解码报错:采用逐行读取、逐行解析的逻辑,适配逐行存储的JSON文件结构
  • 满足去重需求:你提供的两个文件共4条重复记录,合并去重后最终仅保留2条不重复的记录,无冗余内容
  • 自动排除目标文件:避免脚本运行时将自己生成的merged_file.json再次纳入读取范围,造成内容无限叠加
  • 输出的合并JSON文件做了格式化缩进,打开后可读性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 22:06:04