Python实现两个同结构JSON文件的对象数据合并补全
同结构JSON文件按规则合并实现方案
两个文件为结构完全一致的对象数组,可直接按如下逻辑实现合并,无需第三方依赖:
实现步骤
- 加载文件:使用Python标准库
json分别读取两个JSON文件,解析为原生Python列表/字典对象,不要直接对JSON字符串做拼接操作,这也是之前用json.dumps无法得到正确结果的核心原因——字符串操作会破坏JSON结构合法性 - 对象配对:如果两个文件的对象顺序完全对应,直接按索引配对即可;如果无法保证顺序一致,就以
symbol字段作为唯一键,将两个文件的对象转为symbol:对象的映射表做匹配,避免顺序错位导致数据错配 - 属性合并:逐一遍历对象的每个字段,按规则处理:
- 字段值为列表类型(如
open/close/cmfs等):将file2对应列表的所有元素追加到file1对应列表尾部 - 字段值为单值类型(数字、字符串,如
deltasum/deltatot/symbol等):直接用file2的字段值覆盖file1原有值,标识类字段两个文件值完全一致,覆盖不会产生异常
- 字段值为列表类型(如
- 结果输出:合并完成后使用
json.dump将结果写入目标文件,指定ensure_ascii=False避免乱码,可通过indent参数设置缩进格式化输出。
可直接运行的代码示例
import json # 按需修改文件路径 FILE1_PATH = "file1.json" FILE2_PATH = "file2.json" OUTPUT_PATH = "merged_result.json" with open(FILE1_PATH, "r", encoding="utf-8") as f: data1 = json.load(f) with open(FILE2_PATH, "r", encoding="utf-8") as f: data2 = json.load(f) # 前置校验:两个文件对象数量必须一致 if len(data1) != len(data2): raise ValueError("两个JSON文件的对象数量不匹配,无法执行合并") merged_data = [] # ---------- 顺序可靠时用这段逻辑 ---------- for item1, item2 in zip(data1, data2): temp_item = {} for key, val1 in item1.items(): val2 = item2[key] if isinstance(val1, list): temp_item[key] = val1 + val2 else: temp_item[key] = val2 merged_data.append(temp_item) # ---------- 顺序不可靠时注释上面的逻辑,改用这段按symbol匹配 ---------- # data1_map = {item["symbol"]: item for item in data1} # data2_map = {item["symbol"]: item for item in data2} # for symbol, item1 in data1_map.items(): # item2 = data2_map[symbol] # temp_item = {} # for key, val1 in item1.items(): # val2 = item2[key] # if isinstance(val1, list): # temp_item[key] = val1 + val2 # else: # temp_item[key] = val2 # merged_data.append(temp_item) # 写入结果 with open(OUTPUT_PATH, "w", encoding="utf-8") as f: json.dump(merged_data, f, ensure_ascii=False, indent=2)
注意事项
- 如果列表内存在嵌套结构,只要两个文件对应字段的结构一致,上述列表拼接逻辑可直接生效,无需额外修改
- 如果输出时出现浮点数末尾精度变化(比如示例里的2.839999999999999这类值),属于浮点数存储的正常现象,不影响数据准确性,若有固定精度需求,可在写入前对对应数值做
round处理 - 合并前建议备份两个源文件,避免误操作覆盖原始数据
内容的提问来源于stack exchange,提问作者user3311337
相关产品推荐
相关产品推荐

