map({Animal: .[].payload.animal})
| map(select(.Animal))[][]
使用以下代码,我得到了很长的JSON的以下输出:
[
[
"Dog",
"Cat"
]
]
[
[
"Dog",
"Cat",
"Bird"
]
]
从此输出中,如何构建/添加到我的JQ命令中以获取结果2(狗的总发生次数)。我已经玩了(几个小时!),使用add和select语句的组合来尝试获得所需的输出,但是还没有做到。非常感谢您的帮助!
根据要求:
样本输入:
[{
"Data": {
"IsInUS": 1,
"Pets": [
["Dog", "Cat", "Bird"]
],
"Favorite Pet": "Dog"
},
"UniqueID": "1234"
},
{
"Data": {
"IsInUS": 1,
"Pets": [
["Dog", "Cat", "Bird"]
]
"Favorite Pet": "Cat"
},
"UniqueID": "234"
}]
样本输出:2(计算狗的数量)。
我希望仅在“狗”数据字段/密钥中计算“狗”的出现次数
答案 0 :(得分:0)
主要查询中的最后尾随[]
会产生一个流,这对于使用length
进行计数来说不是很好。为简单起见,您可以选择:
map({Animal: .[].payload.animal})
| map(select(.Animal))[] # <--- JUST ONE []
| flatten
| map(select(. == "Dog"))
| length
您可能想考虑简单地计算原始JSON中“狗”的出现次数:
[.. | strings | select(. == "Dog")] | length
一种更有效的计数方法是对流中的项目进行计数:
def count(s): reduce s as $x (0; .+1);
count(.. | strings | select(. == "Dog"))
count(.. | objects | (.Pets // []) | flatten[] | select(.=="Dog"))