You need to enable JavaScript to run this app. Python json.load()报JSONDecodeError: Extra data错误解决方法
优惠活动
大模型
产品
解决方案
定价
更多

Python json.load()报JSONDecodeError: Extra data错误解决方法

错误成因

报错JSONDecodeError: Extra data的核心原因:
你当前加载的文件是JSON Lines(JSONL)格式,而非标准的单JSON结构文件。这类格式的规则为:每一行独立存储一个合法JSON对象,整个文件没有外层数组包裹,多个独立JSON对象之间靠换行分隔,和你提供的文件样本结构完全一致——第一行是删除类推文的JSON,第二行是另一个删除类推文的JSON,第三行是已发布推文的JSON,三者都是独立的JSON值。

Python内置的json.load()/json.loads()的解析要求为:输入流/字符串必须是一个完整、独立的JSON值(例如单个对象、单个数组)。只要解析完第一个完整JSON对象后,后续还有非空白的剩余内容,就会直接抛出"Extra data"错误。你本次的报错位置在第2行第1列,也就是解析完第一行的删除类JSON后,检测到第二行还有未解析的内容,不符合单JSON的解析规则,因此中断报错。

修复方法

不需要修改原文件结构,逐行读取逐行解析即可,这是处理JSONL格式文件的标准操作:

  1. 基础加载代码
    import json
    
    all_records = []
    with open('tweets.json', 'r', encoding='utf-8') as f:
        for line in f:
            stripped_line = line.strip()
            # 跳过空行,避免无意义的解析报错
            if not stripped_line:
                continue
            # 将每一行作为独立JSON对象解析
            record = json.loads(stripped_line)
            all_records.append(record)
    
  2. 适配提取推文文本目标的优化代码
    所有带delete字段的记录是已删除推文的元信息,没有公开的推文文本内容,可直接跳过;仅存在created_at字段的记录是已发布的有效推文,可提取其中的text字段:
    import json
    
    tweet_texts = []
    with open('tweets.json', 'r', encoding='utf-8') as f:
        for line in f:
            stripped_line = line.strip()
            if not stripped_line:
                continue
            record = json.loads(stripped_line)
            # 跳过删除类记录
            if 'delete' in record:
                continue
            # 提取有效推文的文本内容
            if 'text' in record:
                tweet_texts.append(record['text'])
    
注意事项
  • 大体积的推文文件不要尝试修改为外层套数组、对象间加逗号的标准JSON格式,这种操作会占用大量内存,效率远低于逐行解析。
  • 如果逐行解析时遇到个别行格式异常(例如原文件中偶发的换行截断了单个JSON内容),可增加try-except块捕获单行解析异常,将相邻的不完整行拼接完成后再执行解析,避免整个流程中断。
  • 你提供的样本中出现的跨多行的JSON内容,是粘贴展示时的格式问题,正规渠道导出的Twitter历史JSONL数据,会保证单个JSON对象完整放在同一行内,不会出现行内截断的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.11 16:36:03