如何修复json.decoder.JSONDecodeError: Expecting value: line1 column1错误
解决JSONDecodeError: Expecting value: line 1 column 1 (char 0)问题
可能的原因及解决办法
编码不匹配
JSON文件默认用UTF-8编码,但如果你的文件是GBK或带BOM的UTF-8,直接用json.load()会解析失败。试试指定编码打开:with open('你的JSON文件.json', 'r', encoding='utf-8-sig') as f: data = json.load(f)不确定编码的话,用chardet库检测:
import chardet with open('你的JSON文件.json', 'rb') as f: encoding = chardet.detect(f.read())['encoding'] # 用检测到的编码打开文件 with open('你的JSON文件.json', 'r', encoding=encoding) as f: data = json.load(f)文件有隐形字符/BOM头
Windows下保存的JSON常带UTF-8 BOM头,json.load()识别不了。用utf-8-sig编码打开就能跳过BOM头,上面的代码已经包含这个处理。也可以用文本编辑器(比如VS Code)开启显示控制字符,手动删除开头的隐形字符。JSON格式不合法
文件非空不代表格式对,比如用了单引号、末尾多逗号、括号不闭合这些都是JSON的禁忌。直接用VS Code的JSON扩展就能实时看到错误,或者把文件内容复制到JSON校验工具里排查格式问题。读取方式错误
别用二进制模式rb打开后直接给json.load(),它要的是文本文件对象。如果非要用二进制读,得先解码成字符串再用json.loads():with open('你的JSON文件.json', 'rb') as f: content = f.read().decode('utf-8') data = json.loads(content)
修正后的示例代码
import json def check_and_add_content(): file_path = 'data.json' # 处理文件读取和解析 try: with open(file_path, 'r', encoding='utf-8-sig') as f: data = json.load(f) except json.JSONDecodeError: # 解析失败时初始化空字典 data = {} except FileNotFoundError: # 文件不存在时也初始化空字典 data = {} # 检查并添加指定内容 target_key = "user_id" if target_key not in data: data[target_key] = "123456" # 写入文件,确保格式正确 with open(file_path, 'w', encoding='utf-8') as f: json.dump(data, f, indent=4) check_and_add_content()
内容的提问来源于stack exchange,提问作者Denis Ivanov
相关产品推荐
相关产品推荐

