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

运行Python代码操作JSON文件时文件内容被清空该如何解决?

问题原因
  • 代码使用w(写入)模式打开文件,该模式的原生特性是打开目标文件的同时立即清空所有原有内容,无论后续是否执行写入操作,这是JSON文件数据丢失的直接原因。
  • JSON方法调用逻辑错误:json.dumps()的作用是将Python数据对象转换为JSON格式字符串,入参应为字典、列表等Python数据对象,传入文件对象f既无法读取文件内容,也不具备实际业务意义。读取JSON文件内容需使用json.load(f)方法。
解决方法

场景1:仅读取现有JSON配置数据

正确代码如下:

import json

# 只读模式r打开文件,不会修改原有内容,encoding指定为utf-8避免中文乱码
with open("accounts.json", "r", encoding="utf-8") as f:
    accountData = json.load(f)

# 输出类型应为<class 'dict'>,验证读取成功
print(type(accountData))

注意:你提供的JSON示例中包含//格式的注释,标准JSON语法不支持注释,需提前删除文件中的注释内容,否则会抛出JSONDecodeError读取异常。

场景2:修改配置后保存回文件

遵循「先读→再改→后写」的流程,避免直接用w模式打开文件清空数据:

import json

# 第一步:只读模式读取原有配置
with open("accounts.json", "r", encoding="utf-8") as f:
    accountData = json.load(f)

# 第二步:自定义修改数据(示例:给id为1的用户增加10积分)
for account in accountData["accounts"]:
    if account["id"] == "1":
        account["points"] = str(int(account["points"]) + 10)
        break

# 第三步:写入模式打开文件,将修改后的数据写回
with open("accounts.json", "w", encoding="utf-8") as f:
    # indent=2保持格式化方便人工阅读,ensure_ascii=False避免中文被转义
    json.dump(accountData, f, indent=2, ensure_ascii=False)
核心注意事项
  • 读取文件必须使用r(只读)模式,该模式不会修改原有文件内容,文件不存在时会抛出异常,不会触发清空逻辑。
  • 区分json模块的4个核心方法,避免混用:
    • json.load(文件对象):从已打开的文件中读取JSON内容,转换为Python数据对象
    • json.dump(Python数据对象, 文件对象):将Python数据对象转换为JSON格式,写入已打开的文件
    • json.loads(JSON字符串):将JSON格式字符串转换为Python数据对象,不涉及文件操作
    • json.dumps(Python数据对象):将Python数据对象转换为JSON格式字符串,不涉及文件操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:54:01