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

如何用Python打开JSON文件?读取data.json遇JSONDecodeError报错求助

解决JSONDecodeError: Extra data的问题

看起来你遇到的JSONDecodeError: Extra data是很常见的JSON解析问题,本质是你的data.json文件不符合单个JSON结构的要求——要么是文件里放了多个独立的JSON对象/数组,要么是格式上有语法错误导致解析器读到额外内容。

给你两种最常见场景的解决方案:

场景1:文件是每行一个独立的JSON对象(JSON Lines格式)

如果你的data.json是这种格式(比如每行一条用户信息、一条日志),直接用json.load()会报错,因为它只能解析单个JSON结构。这时候要逐行读取解析:

import json

# 存储所有解析后的数据
data_list = []

# 用with语句自动管理文件资源,避免忘记关闭
with open("data.json", "r", encoding="utf-8") as fp:
    for line in fp:
        # 跳过空行,避免解析空字符串报错
        stripped_line = line.strip()
        if stripped_line:
            data_list.append(json.loads(stripped_line))

场景2:文件里是多个JSON对象连在一起(无包裹)

比如文件内容是{"name":"Alice"}{"name":"Bob"}这种,没有用数组[]把它们包裹起来。这时候可以用JSON解码器的raw_decode()方法逐个解析:

import json

data_list = []
decoder = json.JSONDecoder()

with open("data.json", "r", encoding="utf-8") as fp:
    content = fp.read()
    current_pos = 0
    content_length = len(content)
    
    while current_pos < content_length:
        try:
            # 从当前位置解析JSON,返回解析后的对象和下一个起始位置
            obj, current_pos = decoder.raw_decode(content, current_pos)
            data_list.append(obj)
        except json.JSONDecodeError:
            # 遇到无效字符(比如空格、换行),跳过一个字符继续
            current_pos += 1

额外建议

在处理之前,最好先打开data.json文件检查一下:

  • 是不是有多个独立的JSON结构?
  • 有没有语法错误(比如引号不匹配、逗号遗漏、括号没闭合)?
  • 确认文件编码是UTF-8(如果有中文或特殊字符,指定encoding="utf-8"很重要)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 11:57:30