Python读取JSON文件报JSONDecodeError: Extra data错误原因咨询
JSONDecodeError: Extra data 报错触发原因 这个报错的核心逻辑是:Python 内置的json.load() 仅支持解析单个完整合法的JSON根结构,当解析器读取到第一个合法JSON结构的结束位置后,发现流中还有未被纳入当前结构的剩余内容,就会抛出该错误,报错信息里标注的char 177192就是解析器判定第一个合法结构结束的位置。结合你在Colab读取Google Drive中17MB JSON文件的场景,常见触发原因如下:
- 文件实际为多段独立JSON拼接格式,而非你预期的单数组结构
很多数据导出工具默认输出JSON Lines格式(每行一个独立JSON对象),不会用[]包裹所有对象、也不会在对象之间加逗号分隔,最终文件内容是连续拼接的独立JSON对象,类似{"id":1,"name":"Joe"}{"id":2,"name":"Jane"}{...}。解析器读到第一个对象末尾的}位置(和你报错的字符位置匹配)就判定解析完成,后面的所有对象都会被识别为多余数据。
你可以直接读取文件片段查看报错位置的实际内容,快速定位问题:with open('GOOGLEDRIVE_FILEPATH/FILE_NAME.json', encoding="utf-8-sig") as f: raw_content = f.read() # 打印报错位置前后200字符,查看实际内容格式 print(repr(raw_content[177192-200 : 177192+200])) - JSON结构存在语法错误
如果你确认文件应该是单根数组结构,大概率是结构语法出错:- 数组提前闭合:比如在某个对象结束位置多写了
],导致数组在报错位置就提前结束,后面的所有对象都成了根节点外的多余内容 - 对象间缺失分隔符:两个相邻JSON对象之间漏写逗号,直接是
}{相连,解析器读到第一个}就认为根结构结束 - 存在未转义的特殊字符:比如字符串里的引号、反斜杠没有按JSON规范转义,导致解析器提前判定结构结束
- 数组提前闭合:比如在某个对象结束位置多写了
- 文件内容损坏或不完整
17MB文件在写入Google Drive、Colab挂载读取的过程中可能出现损坏:- 上传时网络波动导致文件截断,或者重复拼接了多段内容
- Colab挂载Drive时缓存异常,实际读取到的文件内容不是Drive上存储的完整版本,这种情况重启Colab实例、重新挂载Drive后重试即可排除。
内容的提问来源于stack exchange,提问作者user92720
相关产品推荐
相关产品推荐

