使用 jq 将带有数组键的对象与精确值匹配

问题描述 投票:0回答:1

匹配第一个具有包含完全相同值的数组的对象(它的长度应始终为 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"
bash jq
1个回答
0
投票

构造数组,将其与

.size
进行比较,然后使用
first
只获取第一个匹配项:

jq --argjson width 1920 --argjson height 1080 '
  first(.[] | select(.size == [$width, $height]).id)
'
366

演示

© www.soinside.com 2019 - 2024. All rights reserved.