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

如何基于id与new_id字段合并三个JSON文件?

基于id和new_id合并三个JSON文件的解决方案

你可以通过建立id和new_id的双向映射,一次性完成三个文件的合并,以下是具体实现方案:


原始JSON文件内容

File1.json

[
    {
        "amount": 100,
        "id": 1
    }
]

File2.json

[
    {
        "new_id": 0,
        "id": 1,
        "date": "01/01/2023"
    }
]

注:JSON中字符串需用引号包裹,这里修正了原内容的日期格式

File3.json

[
    {
        "new_id": 0,
        "start_date": "01/01/2024"
    }
]

注:同样修正日期为字符串类型


目标合并结果

[
    {
        "amount": 100,
        "new_id": 0,
        "id": 1,
        "date": "01/01/2023",
        "start_date": "01/01/2024"
    }
]

实现代码

核心思路

  • 建立两个映射表:id_map(通过id关联条目)和new_id_map(通过new_id关联条目)
  • 按顺序处理三个文件,先绑定带id的条目,再通过new_id关联后续条目,最终合并所有字段

完整代码

import json

# 定义要合并的文件路径列表
file_paths = ['File1.json', 'File2.json', 'File3.json']

# 初始化映射表与合并结果容器
id_map = {}
new_id_map = {}
merged = {}

for path in file_paths:
    with open(path, 'r', encoding='utf-8') as f:
        # 加载整个JSON数组(原代码逐行读取会导致JSON解析错误)
        data = json.load(f)
        for item in data:
            # 处理包含id的条目
            if 'id' in item:
                item_id = item['id']
                # 若该id未在合并结果中,先初始化
                if item_id not in merged:
                    merged[item_id] = item.copy()
                    id_map[item_id] = merged[item_id]
                # 已存在则合并字段
                else:
                    merged[item_id].update(item)
                # 如果条目同时包含new_id,建立new_id映射
                if 'new_id' in item:
                    item_new_id = item['new_id']
                    new_id_map[item_new_id] = merged[item_id]
            # 处理仅包含new_id的条目(如File3)
            elif 'new_id' in item:
                item_new_id = item['new_id']
                # 找到对应的关联条目并合并字段
                if item_new_id in new_id_map:
                    new_id_map[item_new_id].update(item)
                # 无匹配则直接保留条目
                else:
                    merged[f"new_id_{item_new_id}"] = item.copy()
                    new_id_map[item_new_id] = merged[f"new_id_{item_new_id}"]

# 将合并后的字典转为列表,得到最终结果
final_result = list(merged.values())
print(json.dumps(final_result, indent=2))

代码说明

  1. 修正读取逻辑:使用json.load(f)加载整个JSON文件,避免逐行读取导致的数组括号解析错误
  2. 双映射关联:通过id和new_id双向绑定跨文件的关联条目,确保匹配准确
  3. 字段合并:利用字典update()方法合并字段,后读取的重复字段会覆盖前序字段(若有)
  4. 容错处理:对于无匹配关联字段的条目,直接保留到合并结果中

内容的提问来源于stack exchange,提问作者Random Access Memory

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:18:14