匹配第一个具有包含完全相同值的数组的对象(它的长度应始终为 2)
示例:
[
{ 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
# Should match:
# { id: 366, size: [1920, 1080] }
# Then extract id (easy, got this part)
我最好的尝试是使用 contains,但 contains 似乎不能接受超过 1 个参数:
echo $json | jq -r ".[] | select( [ .size[] | contains($width) ] | any ) | .id"
构造数组,将其与
.size
进行比较,然后使用 first
只获取第一个匹配项:
jq --argjson width 1920 --argjson height 1080 '
first(.[] | select(.size == [$width, $height]).id)
'
366