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

Python JSON文件追加写入合并对象及运行时字符串替换问题

解决JSON追加写入后多个独立对象合并问题

你当前用json.dump以追加模式写入文件,每次都会生成一个完整的JSON对象,导致最终文件里是多个独立的JSON结构,这本身就不符合JSON规范(一个合法JSON文件只能有一个顶层结构)。手动替换大括号为逗号的方法容易因为缩进、换行、转义字符等格式问题出错,还会残留多余闭合括号,不是可靠的解决方案。

正确的处理思路是先读取已有数据、合并新数据、再完整写入,具体实现如下:

代码实现

import json
import os

def merge_and_write_json(file_path, new_data):
    merged_data = {}
    
    # 检查文件是否存在且有内容
    if os.path.exists(file_path) and os.path.getsize(file_path) > 0:
        with open(file_path, 'r') as f:
            try:
                # 读取已有JSON数据
                merged_data = json.load(f)
            except json.JSONDecodeError:
                # 若文件内容非法,重置为空字典
                merged_data = {}
    
    # 合并新数据(重复键会被新数据覆盖,需保留旧值可自行修改逻辑)
    merged_data.update(new_data)
    
    # 写入完整的合并后数据
    with open(file_path, 'w') as f:
        json.dump(merged_data, f, indent=4)

# 使用示例
merge_and_write_json("cache_metadata.json", {"val2": "data2"})
merge_and_write_json("cache_metadata.json", {"val3": "data3"})

关键说明

  • 采用w模式覆盖写入,确保文件始终只有一个合法的顶层JSON对象
  • 自动处理文件不存在、为空、内容非法的情况,避免运行报错
  • 若需保留旧键值(不被新数据覆盖),可修改合并逻辑:
    for key, value in new_data.items():
        if key not in merged_data:
            merged_data[key] = value
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:50:48