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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.10 16:15:45