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

使用jq的IN内置函数替换选择条件时遇到的异常问题

jq 1.6中IN函数使用错误导致筛选结果为空的原因

问题场景

给定JSON数组:

[ [ "gpu" ], [ "disk" ] ]

需求是筛选出第一个元素为"gpu"的子数组,使用普通条件map(select(.[0] == "gpu"))能得到正确结果[["gpu"]],但使用map(select(.[0] | IN(["gpu"])))却返回空数组。

核心原因

jq 1.6的IN()函数不接受数组作为直接参数,它的设计逻辑是接收多个独立的值。当你传入["gpu"]时,函数会判断目标值(这里是字符串"gpu")是否等于这个数组对象,显然字符串和数组属于不同类型的元素,判断结果为false,因此select过滤不到任何元素,最终返回空数组。

正确用法

直接传入单个匹配值

将数组参数改为单独的值:

map(select(.[0] | IN("gpu")))

基于数组集合进行匹配

如果需要用数组作为匹配集合,需要通过[]展开数组中的元素,让IN()逐个判断:

# 通过参数定义匹配数组,再执行筛选
jq --argjson targets '["gpu"]' 'map(select(.[0] | IN($targets[])))' input.json

以上两种写法都能得到预期的筛选结果[["gpu"]]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:52:33