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
相关产品推荐
相关产品推荐

