请求协助:合并3个JSON文件并解决追加内容时无法删除末尾}的问题
解决JSON文件合并时无法删除末尾
}的问题 我猜你现在的情况是:每个源JSON文件都是单个JSON对象(比如{"name":"Alice", "email":"alice@example.com", ...}),而你想把它们合并成一个合法的JSON结构(比如包含多个对象的数组,或者一个带数组字段的大对象)。之前的代码只是简单追加内容,导致JSON结构损坏——直接在}后面加新对象会变成}{...},这完全不符合JSON规范,自然没法正常解析。
下面给你两种最常见场景的解决方案,你可以根据自己的需求选:
场景1:合并为JSON数组(最推荐)
如果最终想要得到[obj1, obj2, obj3]这样的数组结构,咱们可以按这个思路来:
核心思路
- 先给输出文件写入数组的起始标记
[ - 逐个读取源JSON文件的对象,依次写入输出文件,用逗号分隔开(最后一个对象不用加逗号)
- 最后写入
]闭合数组,确保JSON结构合法
示例代码(Python为例)
import json import os # 替换成你的三个源JSON文件路径 source_files = ["file1.json", "file2.json", "file3.json"] output_file = "merged_result.json" # 初始化输出文件,写入数组开头 with open(output_file, "w", encoding="utf-8") as f: f.write("[") # 遍历处理每个源文件 for idx, file_path in enumerate(source_files): # 读取单个源文件的JSON对象 with open(file_path, "r", encoding="utf-8") as f: single_obj = json.load(f) # 追加到输出文件 with open(output_file, "a", encoding="utf-8") as f: # 不是第一个对象的话,先写逗号做分隔 if idx > 0: f.write(",") # 把对象转成合法的JSON字符串写入 json.dump(single_obj, f) # 写入数组结尾,完成合法JSON结构 with open(output_file, "a", encoding="utf-8") as f: f.write("]") print(f"合并搞定啦!输出文件在:{output_file}")
场景2:追加到已有JSON对象的数组字段中
如果你的输出文件原本是类似{"records": [obj1]}的结构,现在要把另外两个对象追加到records数组里,那不能直接在文件末尾改字符,得先读取原内容修改后再写回去:
核心思路
- 先检查输出文件是否存在,不存在就初始化一个带空数组的结构
- 读取现有输出文件的内容,解析成Python字典
- 逐个读取源文件的对象,追加到字典的目标数组里
- 把修改后的字典重新写入输出文件(覆盖原内容)
示例代码(Python为例)
import json import os source_files = ["file1.json", "file2.json", "file3.json"] output_file = "merged_result.json" # 如果输出文件不存在,先初始化结构 if not os.path.exists(output_file): with open(output_file, "w", encoding="utf-8") as f: json.dump({"records": []}, f) # 读取现有合并内容 with open(output_file, "r", encoding="utf-8") as f: merged_data = json.load(f) # 逐个追加源文件的对象 for file_path in source_files: with open(file_path, "r", encoding="utf-8") as f: single_obj = json.load(f) merged_data["records"].append(single_obj) # 把更新后的内容写回文件 with open(output_file, "w", encoding="utf-8") as f: json.dump(merged_data, f, indent=2) # indent=2是让JSON更易读,可去掉 print(f"合并完成!输出文件:{output_file}")
为啥你之前的方法行不通?
直接在文件末尾删}再追加的思路本身就容易出问题——如果文件内容有缩进、换行,你很难精准定位到最后一个}的位置,而且手动修改字符很容易破坏JSON的格式规范。正确的做法是先把JSON解析成内存里的数据结构(比如字典、数组),修改后再重新生成合法的JSON字符串写入文件,这样既能保证结构正确,也更稳定。
如果你的源文件是其他格式(比如每个文件里有多个对象),可以告诉我具体情况,我再帮你调整方案~
内容的提问来源于stack exchange,提问作者Manu
相关产品推荐
相关产品推荐

