You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:25:42