给出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.json
,json
每次与子元素数组中的ogv
匹配时,都会输出一次元素。如何获得jq
仅输出每个匹配元素一次?
使用any
比依赖unique
更有效。例如:
jq -r '.games[] | select(any(.files[]; test("ogv")))'
jq -r '[.games[] | select(.files[] | contains("ogv"))] | unique | .[]' foo.json
或者,因为我真正想要的只是id
,
jq -r '[.games[] | select(.files[] | contains("ogv")) | .id] | unique | .[]' foo.json