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

Python用json.load加载多JSON字典报Extra data错误如何解决

你遇到的两个错误的根因:

  1. 第一个JSONDecodeError: Extra data是因为标准json.load()只能解析单个合法JSON对象,你手上的文件是多独立JSON对象拼接的格式,不属于标准单JSON结构,所以原生方法不支持。
  2. 第二个TypeError是因为json.dumps()的作用是将Python对象序列化为JSON字符串,你传入了文件句柄r作为入参,文件对象不属于可JSON序列化的类型,自然触发报错,这个修改方向是错误的。

可行解决方案

方案1:通用兼容方案(支持单个JSON跨多行,大文件低内存占用)

用json.JSONDecoder.raw_decode()逐块解析,不需要一次性加载整个文件到内存,也不需要修改源文件格式:

import json

def read_json_file(file):
    result = []
    decoder = json.JSONDecoder()
    buffer = ""
    with open(file, "r", encoding="utf-8") as f:
        for line in f:
            buffer += line.strip()
            # 循环处理缓冲区里的所有完整JSON对象
            while buffer:
                try:
                    # 从缓冲区起始位置解析一个JSON对象,返回对象和结束下标
                    obj, end_idx = decoder.raw_decode(buffer)
                    result.append(obj)
                    # 移除已经解析完成的内容,剩余内容留待后续拼接
                    buffer = buffer[end_idx:].strip()
                except json.JSONDecodeError:
                    # 缓冲区内容不足以构成完整JSON对象,跳出循环读下一行
                    break
    return result

方案2:简化方案(仅适用于每个JSON对象独占一行的场景)

如果你的文件每个JSON对象单独占一行,没有跨行的情况,可以直接逐行解析,代码更简洁:

import json

def read_json_file(file):
    result = []
    with open(file, "r", encoding="utf-8") as f:
        for line in f:
            line = line.strip()
            if not line:
                continue
            result.append(json.loads(line))
    return result

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:27:04