Python读取json文件报JSONDecodeError: Expecting value如何解决
问题产生原因
报错json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)的核心原因是JSON解析器拿到的待解析内容为空,或者第一个字符就不是合法JSON结构,结合你的代码和环境,具体触发原因通常有以下几种:
- 相对路径读取错位:你当前用相对路径
'config.json'读取文件,Python读取相对路径时是以执行命令时的终端工作目录为基准,而非main.py文件所在的项目目录。如果你在非项目目录下启动脚本(比如在家目录执行python3 /home/paul/Documents/Nouvale/main.py),程序会读取工作目录下的同名config.json,如果该文件是空文件,就会触发这个报错。 - 配置文件本身异常:项目目录下的
config.json实际为空文件,或者文件开头带有UTF-8 BOM头、零宽空格等不可见非法字符,导致解析器从第一个字符位置就无法识别合法JSON结构。 - 代码笔误风险:你贴出的代码里,
open()返回的文件对象赋值给了config变量,但后续json.load()传入的是config_file,如果不是贴代码时的手误,这里会先触发NameError;如果实际代码里变量名一致可忽略这条。
修复方法
按以下顺序排查修复即可:
- 替换文件读取逻辑,改用绝对路径定位配置文件,彻底规避工作目录导致的路径错位问题,同时用
with上下文管理器自动处理文件资源释放,修正后的参考代码如下:
import json import os # 获取当前脚本所在目录的绝对路径,拼接配置文件路径 script_dir = os.path.dirname(os.path.abspath(__file__)) config_full_path = os.path.join(script_dir, "config.json") with open(config_full_path, "r", encoding="utf-8") as config_file: # 调试阶段可以放开下两行注释,确认读到的文件内容是否正确 # print("读取到的配置文件原始内容:", repr(config_file.read())) # config_file.seek(0) # 上面read后指针移到末尾,需要重置指针再执行load config_data = json.load(config_file)
- 校验配置文件:打开项目目录下的
config.json,确认文件内容和你贴出的结构一致,没有前置空行、乱码,保存时选择「UTF-8 无BOM」编码格式。 - 排查冗余文件:检查你常用的终端启动目录(比如家目录
/home/paul/)下是否存在空的config.json同名文件,如有可删除避免后续路径混淆。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

