我有一个这样的电影清单:
[
{
"title":"X",
"genres":[
{
"tag":"Horror"
},
{
"tag":"Thriller"
},
{
"tag":"Mystery"
}
]
},
{
"title":"Zero Dark Thirty",
"genres":[
{
"tag":"Thriller"
},
{
"tag":"Drama"
},
{
"tag":"History"
},
{
"tag":"War"
}
]
}
]
我想查询所有独特的类型并计算电影的数量,输出如下所示:
{
"Horror":1,
"Thriller":2,
"Mystery":1,
"Drama":1,
"History":1,
"War":1
}
这可以通过
jq
实现吗?
是的,是的。
map(.genres[].tag)
| group_by(.)
| map({ key:first, value:length })
| from_entries
输出:
{
"Drama": 1,
"History": 1,
"Horror": 1,
"Mystery": 1,
"Thriller": 2,
"War": 1
}
或者,使用基于
reduce
的方法并简单地增加一个计数器:
reduce .[].genres[].tag as $genre ({}; .[$genre] += 1)
这可能比构建数组和分组更有效。