Python加载JSON文件报JSONDecodeError: Expecting value错误如何修复
报错核心原因
你遇到的json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0),表示JSON解析器在读取内容的第1个字符位置(也就是文件最开头)就没有找到合法的JSON值。
注意:你现在的报错不是文件不存在导致的——如果open()找不到目标文件会直接抛出FileNotFoundError,程序根本走不到json.load()这一步,说明程序已经成功打开了一个文件,只是这个文件里的内容无法被解析为合法JSON。
排查&修复步骤
按以下顺序逐一排查即可定位问题:
- 检查文件是否为空
找到你项目下的StudentJson.json,右键查看属性,如果文件大小为0字节,说明文件里没有任何内容,自然无法解析。你可以先写入一段合法的测试JSON验证:{"student_name": "张三", "student_id": 1001, "score": 95} - 确认打开的是目标文件
代码里写的相对路径'StudentJson.json'是从运行Python命令时的工作目录查找文件,不是从students.py脚本所在的目录查找,很可能你实际打开的是其他路径下的同名空文件/非法格式文件。在代码里加一行打印即可确认实际读取的文件路径:
如果打印的路径和你存放JSON内容的文件路径不一致,直接改成目标文件的绝对路径即可。import os print(os.path.abspath('StudentJson.json')) - 显式指定文件编码
如果JSON文件保存时用了带BOM的UTF-8、GBK等编码,直接默认读取可能在文件开头读入非法隐藏字符,导致解析失败。打开文件时显式传入encoding参数:- 普通UTF-8编码文件:
open(file_path, 'r', encoding='utf-8') - 带BOM头的UTF-8文件:
open(file_path, 'r', encoding='utf-8-sig')
- 普通UTF-8编码文件:
- 校验JSON内容合法性
打开JSON文件确认内容符合JSON语法规范:- 合法JSON只能以
{(对象)、[(数组)、双引号包裹的字符串、数字、true/false/null开头 - JSON不支持任何格式的注释(
//单行注释、/* */多行注释都不行) - 所有字符串必须用英文双引号包裹,不能用单引号、中文全角引号
- 键值对之间的逗号不能多写、漏写
- 合法JSON只能以
修复后参考代码
用上下文管理器自动处理文件关闭,增加调试打印方便定位问题:
import json import os # 替换为你的JSON文件实际绝对路径 file_path = r'c:\Users\Chinyere\Documents\Python\Openpyxl\StudentJson.json' with open(file_path, 'r', encoding='utf-8') as f: # 先读取原始内容打印,确认拿到的内容正确 raw_content = f.read() print("读取到的文件原始内容:", repr(raw_content)) data = json.loads(raw_content) print(data.items())
如果运行后打印的raw_content是空字符串'',直接对应第一种「文件为空」的问题;如果打印的内容开头有\ufeff字样,对应编码问题,把encoding改成utf-8-sig即可。
内容的提问来源于stack exchange,提问作者Chinyere Unamba
相关产品推荐
相关产品推荐

