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

如何用jq匹配数组值完全符合指定值的首个对象

问题:匹配首个size数组完全符合指定宽高的对象
  • 需求:从JSON数组中找到首个size数组(长度固定为2)与指定[width, height]完全一致的对象,后续提取该对象的id(提取id部分已掌握)

示例数据

JSON数组

[
  { "id": 242, "size": [500, 500] },
  { "id": 234, "size": [500, 1920] },
  { "id": 168, "size": [234, 1080] },
  { "id": 315, "size": [1080, 1920] },
  { "id": 366, "size": [1920, 1080] },
  { "id": 367, "size": [1920, 1080] }
]

指定参数

width=1920
height=1080

预期结果

匹配到的首个对象:

{ "id": 366, "size": [1920, 1080] }

之前的错误尝试

用contains无法实现精确匹配,只会匹配包含指定值的元素:

echo $json | jq -r ".[] | select( [ .size[] | contains($width) ] | any ) | .id"

解决方案

直接用数组精确相等判断,结合first取首个匹配项即可:

完整匹配对象的命令

echo "$json" | jq --arg w "$width" --arg h "$height" 'first(.[] | select(.size == [$w | tonumber, $h | tonumber]))'

命令细节

  1. --arg 参数:把shell里的width和height传入jq,避免字符串拼接的安全问题
  2. tonumber:将传入的字符串参数转为数字,和JSON里的数字类型匹配
  3. .size == [...]:严格判断数组的顺序和值完全一致
  4. first:从所有符合条件的对象中取第一个

直接提取id的命令

如果不需要整个对象,直接拿id:

echo "$json" | jq --arg w "$width" --arg h "$height" -r 'first(.[] | select(.size == [$w | tonumber, $h | tonumber])).id'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:57:17