根据对子元素数组的搜索选择元素,对于数组中的每个匹配项,该元素都会返回一次

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

给出json

{ "games": [
{
    "id":1,
    "files": [ "foo.mp4" ]
},
{
    "id":2,
    "files": [ "foo.ogv",  "bar.ogv" ]
},
{
    "id":3,
    "files": [ "bar.ogv" ]
}
]}

和命令jq -r '.games[] | select(.files[] | contains("ogv"))' foo.jsonjson每次与子元素数组中的ogv匹配时,都会输出一次元素。如何获得jq仅输出每个匹配元素一次?

jq
2个回答
0
投票

使用any比依赖unique更有效。例如:

jq -r '.games[] | select(any(.files[]; test("ogv")))'

0
投票
jq -r '[.games[] | select(.files[] | contains("ogv"))] | unique | .[]' foo.json

或者,因为我真正想要的只是id

jq -r '[.games[] | select(.files[] | contains("ogv")) | .id] | unique | .[]' foo.json
© www.soinside.com 2019 - 2024. All rights reserved.