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

如何使用jq比较两个JSON文件并按指定键值删除重复对象

用jq按指定字段比对两个JSON文件提取独有条目

实现命令

简洁通用版(兼容jq 1.5及以上)

jq -n '
# 读取第一个文件内容存入$f1
input as $f1
# 读取第二个文件,过滤User Data数组
| input
| .["User Data"] |= map(
    select(
        .["Car ID"] as $current_id
        | $f1["User Data"] | map(.["Car ID"]) | index($current_id) | not
    )
)
' file1.json file2.json

高性能版(适合大文件,要求jq 1.6+)

利用内置INDEX函数构建哈希查找表,时间复杂度更低:

jq -n '
input as $f1
| INDEX($f1["User Data"][]; .["Car ID"]) as $exist_map
| input
| .["User Data"] |= map(select($exist_map[.["Car ID"]] | not))
' file1.json file2.json

效果验证

以示例文件运行上述命令,输出结果完全符合预期:

{
  "User Data": [
    {
      "First Name": "Jeremy",
      "Last Name": "Blake",
      "DOB": "1965-09-21",
      "Car ID": "UJ345IE2"
    }
  ]
}

注意事项

  • 字段名Car ID包含空格,必须用.["Car ID"]的方式引用,不能直接使用.Car ID的点操作符写法
  • 如果你实际使用的JSON文件顶层数组键名不是User Data,直接替换命令中对应的键名即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:18:03