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

如何用jq找出JSON数组中不存在于另一数组的元素?

使用jq提取第一个JSON数组独有的元素

要实现从a.json中筛选出所有不存在于b.json的元素,核心思路是先把第二个数组的元素构建成高效的查找结构,再遍历第一个数组进行筛选。

方法一(高效推荐):用INDEX构建查找表

适合处理较大的数组,查找效率为O(1):

jq --argfile b b.json '[($b | INDEX(.)) as $b_index | .[] | select($b_index[.] | not)]' a.json

命令解释:

  • --argfile b b.json:将b.json的内容加载到jq变量$b中
  • ($b | INDEX(.)) as $b_index:把$b数组转换成一个对象,每个数组元素会被序列化为字符串作为键,对应值为原元素,以此构建快速查找表
  • .[]:遍历a.json数组中的每一个元素
  • select($b_index[.] | not):筛选出在$b_index中没有对应条目(即不存在于b.json)的元素
  • 外层的[ ... ]:把筛选后的元素重新组合成数组

方法二:用IN直接判断(简单直观)

适合小体量数组,写法更简洁:

jq --argfile b b.json '[.[] | select(. | IN($b[]) | not)]' a.json

命令解释:

  • . | IN($b[]):检查当前元素是否存在于$b数组中
  • select(...) | not:保留不存在于$b的元素

运行结果

针对你提供的两个JSON文件,运行上述命令后都会得到预期输出:

[
  {
    "key1": "foo",
    "key2": "baz"
  },
  {
    "key1": "bla",
    "key2": "blubb"
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:03:36