Match first object which has an array that contains exactly same values (it's should always be length of 2)
Example:
[
{ "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)
My best attempt was to use contains, but it doesn't seems contains can take more than 1 argument:
echo $json | jq -r ".[] | select( [ .size[] | contains($width) ] | any ) | .id"
Construct the array, compare it to .size
, and use first
to only get the first match:
jq --argjson width 1920 --argjson height 1080 '
first(.[] | select(.size == [$width, $height]).id)
'
jq --argjson size '[1920, 1080]' '
first(.[] | select(.size == $size).id)
'
Output:
366