Python读取JSON文件报JSONDecodeError解码异常问题求助
问题根因
这个报错和文件路径无关:从你打印的目录清单可以确认identities.json存在,open()已经成功拿到文件对象,触发JSONDecodeError的核心原因是**identities.json的内容不符合标准JSON语法规范**,解析器在文件第27行第3列(字符偏移量238的位置)读到了不符合规则的内容,无法继续解析。
另外注意一个潜在隐患:你的脚本文件名为import json.py,和Python标准库json模块重名,后续运行时可能出现Python优先导入你自己的脚本、而非标准库json模块的问题,建议立刻把脚本重命名为read_identities.py这类不与标准库重名的名称。
常见触发场景
第27行附近大概率存在以下格式错误之一:
- 多余尾逗号:对象/数组最后一个键值对/元素末尾多写了逗号,JSON语法不允许尾逗号存在,例如
{"id": 1, "name": "admin",}末尾的逗号就是非法格式 - 引号使用错误:用单引号包裹键名或字符串值,JSON要求所有字符串类型的键、值必须使用双引号包裹
- 存在非法注释:写了
// 注释、/* 注释 */、# 注释类内容,标准JSON不支持任何注释语法 - 特殊字符未转义:字符串内容里直接包含未转义的双引号、反斜杠、真实换行符,没有用
\"、\\、\n做转义 - 结构不完整:对象/数组的括号没有闭合,或者文件被截断、内容不全
- 编码异常:文件带UTF-8 BOM头,或者保存时用了非UTF-8编码,开头存在隐藏的不可见特殊字符
排查修复步骤
- 先精准定位错误位置的内容,运行以下代码直接打印报错点附近的文本,不用手动逐行翻找:
import json file_path = r'C:\Users\NEHRU\Desktop\New Project\identities.json' # 如果确认是BOM编码问题,把encoding改成'utf-8-sig' with open(file_path, 'r', encoding='utf-8') as f: file_content = f.read() # 打印报错位置前后50个字符的原始内容 error_pos = 238 print("错误位置附近原始内容:") print(repr(file_content[max(0, error_pos - 50) : error_pos + 50]))
- 根据打印出的内容对应修复格式问题:
- 删掉多余的尾逗号
- 把所有单引号替换为符合要求的双引号
- 删除文件内所有注释内容
- 给未转义的特殊字符添加转义符
- 补全未闭合的括号、补全缺失的文件内容
- 如果打印内容开头出现
\ufeff字符,把打开文件的encoding参数改为utf-8-sig即可自动过滤BOM头
- 修复完成后可以用代码编辑器自带的JSON格式化/校验功能验证整个文件格式是否合法,再重新运行读取代码即可。
内容的提问来源于stack exchange,提问作者user2011902
相关产品推荐
相关产品推荐

