109MB有效JSON文件解码报错:ValueError: No JSON object could be decoded
解决JSON解码报错:ValueError: No JSON object could be decoded
针对你109MB的JSON文件解码失败的问题,我整理了几个实用的排查方向,你可以一步步来验证:
1. 先确认文件是否完整
你给出的示例最后是{"sensorType":"Radarcape","sensorLat...,这明显是截断的格式。虽然这只是示例,但真实文件很可能存在未闭合的数组/对象括号,或者在生成、传输过程中损坏,导致末尾不完整。
- 快速检查文件末尾:
- Linux/macOS终端运行:
tail -20 your_file.json - Windows PowerShell运行:
Get-Content your_file.json | Select-Object -Last 20
重点看最后一行是否是](因为你的JSON是数组格式),每个对象的{}、引号是否都配对闭合。如果发现末尾不完整,尝试重新获取完整的源文件。
- Linux/macOS终端运行:
2. 用工具校验JSON语法合法性
大文件手动检查不现实,用Python自带的工具就能快速校验:
- 终端运行:
python -m json.tool your_file.json > /dev/null(Linux/macOS)或python -m json.tool your_file.json > nul(Windows)
如果有语法错误,这个命令会直接输出错误位置和原因,帮你定位问题点。 - 如果文件太大导致内存压力,可以用流式校验脚本,逐行排查报错位置:
import json with open('your_file.json', 'r') as f: decoder = json.JSONDecoder() buffer = '' line_num = 0 for line in f: line_num += 1 buffer += line.strip() try: # 尝试持续解码buffer中的有效JSON while buffer: obj, idx = decoder.raw_decode(buffer) buffer = buffer[idx:] except ValueError as e: print(f"解码错误出现在第 {line_num} 行,当前buffer内容片段:{buffer[:100]}...") print(f"错误详情:{e}") break
3. 排查编码问题
如果JSON文件的编码不是标准UTF-8(比如带BOM头的UTF-8,或者其他编码),也会触发解码失败:
- 检查文件编码:
- Linux/macOS终端运行:
file -I your_file.json - Windows可以用Notepad++打开文件,查看右下角的编码标识
- Linux/macOS终端运行:
- 解码时指定对应编码,比如处理带BOM的UTF-8:
with open('your_file.json', 'r', encoding='utf-8-sig') as f: data = json.load(f)
4. 尝试流式加载避免内存问题
109MB的文件虽然不算超大,但如果你的Python环境内存有限,一次性加载可能出问题(不过这个通常会报内存错误,而非JSON格式错误,但可以尝试排除):
- 用
ijson库流式读取(先安装:pip install ijson),逐对象解析,不一次性加载整个文件:
import ijson with open('your_file.json', 'r') as f: # 遍历数组中的每个对象 for obj in ijson.items(f, 'item'): # 这里可以处理单个对象,比如打印传感器类型 print(obj.get('sensorType'))
5. 检查是否有非JSON内容混入
有时候文件开头或中间可能混入了日志、注释或BOM头这类非JSON内容,导致解析器无法识别:
- 查看文件开头:
head -20 your_file.json(Linux/macOS)或Get-Content your_file.json | Select-Object -First 20(Windows),确认开头是[(数组起始符),没有多余字符。
内容的提问来源于stack exchange,提问作者jelmood jasser
相关产品推荐
相关产品推荐

