You need to enable JavaScript to run this app. Python 3.8使用json库打开JSON文件触发双引号规范类JSONDecodeError如何解决
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 21:06:02