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

如何使用jq基于另一筛选结果过滤JSON文档元素?

用jq实现类似SQL IN子查询的筛选需求

原始JSON数据

[
  {"id": 1, "ref":32, "key":10},
  {"id": 2, "ref":32, "key":75},
  {"id": 3, "ref":27, "key":13},
  {"id": 4, "ref":27, "key":42},
  {"id": 5, "ref":438, "key":42}
]

需求说明

需要筛选出所有ref值属于「key等于42的元素的ref值集合」的元素,对应SQL逻辑:

select * from table where ref in (select ref from table where key = 42)

一、动态匹配key=42对应的ref集合

你已经成功得到目标ref数组:[.[]|select(.key==42).ref],只需要将这个数组存为变量,再用jq内置的IN函数判断元素的ref是否在该集合中即可:

(.[]|select(.key==42).ref) as $target_refs | .[] | select(.ref | IN($target_refs[]))

执行结果:

{"id":3,"ref":27,"key":13}
{"id":4,"ref":27,"key":42}
{"id":5,"ref":438,"key":42}

二、匹配硬编码的ref列表

如果要筛选ref在指定硬编码列表(比如[32,45])中的元素,直接用IN函数传入列表元素就行:

.[] | select(.ref | IN(32,45))

针对示例JSON的执行结果:

{"id":1,"ref":32,"key":10}
{"id":2,"ref":32,"key":75}

也可以把硬编码列表存为变量,让代码更易读:

[32,45] as $target_refs | .[] | select(.ref | IN($target_refs[]))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 02:22:24