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

Python脚本更新JSON文件异常:更新key2时误新增条目求解决方案

问题分析与解决

你的代码出现「新增条目而非更新原有内容」的问题,核心原因有两个:

  • 使用r+模式打开文件时,读取完内容后文件指针停在文件末尾,直接执行json.dump(item, list)会把单个条目追加到原文件尾部,而非覆盖原有内容
  • 错误地逐个写入修改后的单条数据,而非将整个修改完成的data对象整体写入文件

另外还有个细节错误:list.close没有加括号,这不会实际触发文件关闭操作,正确写法是list.close()

正确实现代码

方法一:分两次打开文件(读、写分离,逻辑更直观)

import json

# 读取文件中的JSON数据
with open('file.json', 'r') as f:
    data = json.load(f)

# 遍历更新所有条目的key2值
for item in data['list']:
    item['key2'] = "newValue"  # 字典直接赋值比update更简洁,效果一致

# 写入修改后的完整数据('w'模式会自动清空原文件内容)
with open('file.json', 'w') as f:
    json.dump(data, f, indent=4)  # indent=4用于格式化输出,和原文件格式保持一致

方法二:单文件句柄读写(手动控制指针与截断)

import json

with open('file.json', 'r+') as f:
    # 读取数据
    data = json.load(f)
    # 更新所有条目
    for item in data['list']:
        item['key2'] = "newValue"
    # 将文件指针移到开头,截断原有内容,再写入新数据
    f.seek(0)
    f.truncate()
    json.dump(data, f, indent=4)

执行任意一种方法后,你都会得到期望的结果:

{
    "list": [
        {
            "key1": "value1",
            "key2": "newValue"
        },
        {
            "key1": "value1",
            "key2": "newValue"
        }
    ]
}

内容的提问来源于stack exchange,提问作者Younes Ben Tlili

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:55:24