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

如何合并多个同结构JSON文件并去重(保持原结构)

合并多个JSON文件并去重数组内容

方法一:Python 脚本(跨平台通用)

这种方法灵活可控,适合需要自定义逻辑或批量处理大量文件的场景。

实现代码

import json
import os
from typing import List, Dict

def merge_json_files(input_files: List[str], output_file: str):
    merged_data = {
        "version": "",
        "vulnerabilities": [],
        "dependency_files": []
    }
    
    # 存储已存在的ID和名称,用于去重
    seen_vuln_ids = set()
    seen_dep_names = set()
    
    for file_path in input_files:
        if not os.path.exists(file_path):
            print(f"警告:文件 {file_path} 不存在,跳过")
            continue
            
        with open(file_path, 'r', encoding='utf-8') as f:
            data = json.load(f)
            
        # 初始化version(所有文件版本一致,取第一个即可)
        if not merged_data["version"]:
            merged_data["version"] = data["version"]
        
        # 处理vulnerabilities数组,按id去重
        for vuln in data.get("vulnerabilities", []):
            vuln_id = vuln.get("id")
            if vuln_id and vuln_id not in seen_vuln_ids:
                seen_vuln_ids.add(vuln_id)
                merged_data["vulnerabilities"].append(vuln)
        
        # 处理dependency_files数组,按name去重
        for dep in data.get("dependency_files", []):
            dep_name = dep.get("name")
            if dep_name and dep_name not in seen_dep_names:
                seen_dep_names.add(dep_name)
                merged_data["dependency_files"].append(dep)
    
    # 写入输出文件
    with open(output_file, 'w', encoding='utf-8') as f:
        json.dump(merged_data, f, indent=4)

# 使用示例
if __name__ == "__main__":
    input_files = ["file1.json", "file2.json"]  # 可添加更多文件
    merge_json_files(input_files, "onefile.json")
    print("合并完成,结果已保存到onefile.json")

使用说明

  1. 将上述代码保存为merge_json.py
  2. 把需要合并的JSON文件放在同目录下,修改input_files列表添加所有目标文件
  3. 运行命令:python merge_json.py

方法二:jq 命令行工具(适合Linux/macOS)

如果熟悉命令行,jq是高效的JSON处理工具,无需编写脚本。

合并命令

jq -n '
    reduce inputs as $in (
        {version: "", vulnerabilities: [], dependency_files: []};
        .version = $in.version |
        .vulnerabilities += $in.vulnerabilities |
        .dependency_files += $in.dependency_files
    ) |
    .vulnerabilities = [.vulnerabilities[] | unique_by(.id)] |
    .dependency_files = [.dependency_files[] | unique_by(.name)]
' file1.json file2.json > onefile.json

命令解释

  • reduce inputs as $in:遍历所有输入的JSON文件
  • 先合并两个数组,再用unique_by(.id)和unique_by(.name)分别对两个数组去重
  • 最终结果重定向到onefile.json

注意事项

  • 需要先安装jq:sudo apt install jq(Debian/Ubuntu)或brew install jq(macOS)
  • 若有更多文件,直接在命令末尾添加即可,比如file1.json file2.json file3.json

内容的提问来源于stack exchange,提问作者Eklas Aldwairi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:01:02