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

如何使用jq根据字符串ID移除JSON数组中匹配的对象

用jq实现JSON数组去重(按指定字段)

要解决的问题:从file1中移除所有data.id与file2重复的对象,只保留不重复的条目。

你之前命令的问题

  1. id提取错误:$dst | [.data[].id]写法不对,因为$dst是数组,每个元素是带data的对象,正确提取id列表应该是$dst | map(.data.id)。
  2. in操作符用错了:jq里in是用来检查对象的键,不是数组元素,直接用数组会触发“Cannot check whether string has a string key”错误,得把id列表转成键值对对象才能用。

正确的jq命令

jq -n --argfile src /var/tmp/w-src.json --argfile dst /var/tmp/w-dst.json '
# 把file2的id转成查找对象,方便快速判断
($dst | map({(.data.id): true}) | add) as $exclude_ids
# 筛选file1中id不在排除列表里的对象
| $src | map(select(.data.id | not(in($exclude_ids))))
'

命令说明

  • ($dst | map({(.data.id): true}) | add):把file2里的所有data.id做成一个像{"61": true, "63": true}的对象,这样判断id是否存在的效率很高。
  • $src | map(select(.data.id | not(in($exclude_ids)))):遍历file1的每个对象,只保留那些data.id不在排除对象里的条目,最终输出就是你要的结果。

运行结果

执行后输出和你期望的完全一致:

[
  {
    "data": {
      "id": "2",
      "nodes": [
        {
          "stuff": "foo"
        }
      ]
    }
  },
  {
    "data": {
      "id": "6",
      "nodes": [
        {
          "stuff": "bar"
        }
      ]
    }
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:41:46