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

无法加载刚创建的JSON文件,报json.decoder.JSONDecodeError: line 1 column 1 (char 0)

问题原因
  • 打开模式指针位置错误:你使用a+模式打开文件时,文件指针默认处于文件末尾,直接调用f.read()会读取到空字符串,JSON解析空内容自然触发Expecting value: line 1 column 1 (char 0)报错。
  • 存储逻辑不符合JSON格式规范:标准JSON不支持直接将新序列化的JSON对象追加到文件末尾,多次追加后整个文件内容会是多个独立JSON字符串拼接的结果,不属于合法JSON结构,后续加载必然失败。
解决方案

根据你的使用场景,推荐两种处理方式:

方式1:标准JSON格式存储(全量读写,适用于数据量不大的场景)

每次写入前先读取完整文件解析为Python对象,合并新数据后全量写回文件,保证文件始终是合法JSON格式:

import json
import os

time_vals = {"seconds": time_spent, "day": amnt}
file_path = os.path.join(os.getcwd(), f"{fname}.json")

# 初始化存储结构,存多条记录用列表,存单条汇总数据用字典
loaded = []
if os.path.exists(file_path):
    # 只读模式打开读取内容
    with open(file_path, 'r', encoding='utf-8') as f:
        loaded = json.load(f)

# 合并新数据,追加记录用append,更新单条字段用update
loaded.append(time_vals)
# 如果是更新单条的汇总数据:loaded["seconds"] += time_spent

# 全量写回文件
with open(file_path, 'w', encoding='utf-8') as f:
    json.dump(loaded, f, indent=4, ensure_ascii=False)

方式2:JSON Lines格式存储(逐行追加,适用于数据量大、频繁写入的场景)

每条记录单独序列化为一行JSON,追加时不需要重写整个文件,读取时逐行解析即可:

import json
import os

time_vals = {"seconds": time_spent, "day": amnt}
file_path = os.path.join(os.getcwd(), f"{fname}.json")

# 追加写入单条记录
with open(file_path, 'a', encoding='utf-8') as f:
    f.write(json.dumps(time_vals, ensure_ascii=False) + '\n')

# 读取所有记录
loaded = []
with open(file_path, 'r', encoding='utf-8') as f:
    for line in f:
        line = line.strip()
        if line:
            loaded.append(json.loads(line))

如果你一定要使用a+模式打开文件后读取,需要先调用f.seek(0)将文件指针移动到文件开头,才能读取到完整内容,但该方法仅解决空读取的问题,无法修复追加后JSON格式不合法的问题。

内容的提问来源于stack exchange,提问作者Tippitytopkek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:36:01