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

如何用jq高效匹配多值及指定范围的JSON对象?

用jq高效筛选JSON对象的两种场景解法

假设Bash变量中存储了多个JSON对象:

json='{"key":"100"}{"key":"200"}{"key":"300"}'

先回顾基础筛选写法:

  • 匹配单个key值:
printf '%s\n' "$json" | jq 'select(.key == "100")'
  • 用or匹配少量多个值:
printf '%s\n' "$json" | jq 'select(.key == "100" or .key == "200")'

一、批量匹配多个key值(替代重复or)

当需要匹配的key值数量较多时,用jq的IN操作符配合数组更简洁高效,把所有目标值放进数组,直接判断key是否属于该数组:

printf '%s\n' "$json" | jq 'select(.key IN ["100", "200", "300"])'

如果目标值需要从外部变量传入,可通过--argjson参数传递数组:

target_values='["100","200"]'
printf '%s\n' "$json" | jq --argjson arr "$target_values" 'select(.key IN $arr)'

二、筛选key值在数值范围内的对象

注意示例中的key是字符串类型,需要先用tonumber转换为数值后再做范围判断:

方法1:直接数值比较

printf '%s\n' "$json" | jq 'select((.key | tonumber) >= 99 and (.key | tonumber) <= 201)'

方法2:用between函数简化写法

jq的between(a;b)可直接判断值是否落在[a,b]闭区间内:

printf '%s\n' "$json" | jq 'select((.key | tonumber) | between(99;201))'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 23:29:54