Python 3.8使用json库打开JSON文件触发双引号规范类JSONDecodeError如何解决
JSON读取报错的排查与解决方案
核心报错根因
你遇到的json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes这类第一行第2列位置的报错,本质是JSON解析器在文件最开头的位置就碰到了不符合标准JSON语法的内容,和json库本身的用法没有关系。
分步排查修复
- 路径拼接问题定位
手动用字符串拼接路径定位目标文件的方式,很容易因为斜杠遗漏、相对路径偏移,导致实际打开的根本不是你想读的JSON文件。最常见的误读场景是把Power BI导出的pbit模板(本质是zip压缩包,二进制内容完全不符合JSON结构)直接当JSON打开,自然会在文件头位置就报语法错。
验证方法很简单:在调用json.load()之前,先读取文件前200个字符打印出来,确认内容确实符合JSON开头的{或[结构,不要盲解析:target_file = pbit_path + file_name with open(target_file, 'r', encoding='utf-8') as f: # 先读文件开头做校验 head_content = f.read(200) print("文件开头内容校验:", head_content) # 校验完把文件指针移回起始位置再做解析 f.seek(0) data = json.load(f) - 非标准JSON格式适配
标准JSON强制要求所有对象属性名必须用双引号包裹,完全不兼容单引号、无引号、尾随逗号的写法。如果打印出来的文件开头是单引号包裹属性名的类Python字典格式,硬套标准json库一定会报这个错。这种场景可以换用Python内置的ast.literal_eval做兼容解析:with open(target_file, 'r', encoding='utf-8') as f: raw_text = f.read() import ast # 兼容单引号属性名的字典类字符串解析 data = ast.literal_eval(raw_text) - 编码兼容处理
Windows环境下如果打开文件时不指定编码,系统会默认用GBK编码读取文件,碰到带BOM头的UTF-8 JSON文件时,文件开头会被读入不可见的非法字符,同样会触发第一行位置的解析报错。
这种场景只要在打开文件时指定utf-8-sig编码(自动兼容带BOM标记的UTF-8文件)就能解决:with open(target_file, 'r', encoding='utf-8-sig') as f: data = json.load(f)
补充提示:如果你的实际读取对象是pbit格式的Power BI模板,不要直接把pbit文件当JSON读取,pbit本身是zip压缩包,需要先做解压操作,从解压后的目录里读取真正的JSON配置文件才能正常解析。
内容的提问来源于stack exchange,提问作者Joan
相关产品推荐
相关产品推荐

