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

jq-1.5:如何根据传入的名字参数正确过滤JSON数组元素?

解决jq 1.5中通过--arg过滤匹配任一元素的问题

问题根源

你之前的命令里,index($input.name) == 0这个判断条件只匹配数组的第一个元素(因为index返回元素在数组中的索引,第一个元素索引为0),所以只会选中"a",而"c"的索引是1,不满足等于0的要求,因此没被返回——不是$input没更新,是判断逻辑错了。

正确命令写法

写法一:直接判断元素是否存在

jq --arg names 'a c' '.[] | select($names | split(" ") | index(.name) != null)' 1.json

写法二:提前存数组变量(更高效清晰)

先把传入的空格分隔字符串转成数组并保存为变量,避免每次筛选都重复分割:

jq --arg names 'a c' '$names | split(" ") as $names_array | .[] | select(.name | $names_array | index(.))' 1.json

写法三:用any函数判断(可读性更强)

jq --arg names 'a c' '$names | split(" ") as $names_array | .[] | select($names_array | any(. == .name))' 1.json

运行结果

执行上述任意命令后,都会返回符合条件的两个元素:

{
  "val": 1,
  "name": "a"
}
{
  "val": 3,
  "name": "c"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:57:38