Arrays JQ:计数字符串出现的次数
使用以下代码,我得到了很长的JSON的以下输出:Arrays JQ:计数字符串出现的次数,arrays,bash,command-line,count,jq,Arrays,Bash,Command Line,Count,Jq,使用以下代码,我得到了很长的JSON的以下输出: map({Animal: .[].payload.animal}) | map(select(.Animal))[][] 从这个输出中,我如何构建/添加我的JQ命令以获得结果2(狗的出现总数)。我已经尝试使用add和select语句的组合(几个小时了!)来获得所需的输出,但一直未能实现。非常感谢您的帮助 应要求: 样本输入: [ [ "Dog", "Cat" ] ] [ [ "Dog", "Ca
map({Animal: .[].payload.animal})
| map(select(.Animal))[][]
从这个输出中,我如何构建/添加我的JQ命令以获得结果2(狗的出现总数)。我已经尝试使用add和select语句的组合(几个小时了!)来获得所需的输出,但一直未能实现。非常感谢您的帮助
应要求: 样本输入:
[
[
"Dog",
"Cat"
]
]
[
[
"Dog",
"Cat",
"Bird"
]
]
样本输出:2(计算狗的数量)
我希望仅当“Dog”出现在“Pets”数据字段/键中时,才对其进行计数。主查询结果中的最后一个尾随
[]
在一个流中,这不适合使用长度进行计数。为简单起见,您可以选择:
[{
"Data": {
"IsInUS": 1,
"Pets": [
["Dog", "Cat", "Bird"]
],
"Favorite Pet": "Dog"
},
"UniqueID": "1234"
},
{
"Data": {
"IsInUS": 1,
"Pets": [
["Dog", "Cat", "Bird"]
]
"Favorite Pet": "Cat"
},
"UniqueID": "234"
}]
计算流中的项目
更有效的计数方法是对流中的项目进行计数:
[.. | strings | select(. == "Dog")] | length
“狗”只在宠物中出现
请在您的问题中添加示例输入和该示例输入所需的输出。我已更新了问题,感谢您的注释和帮助!我猜您的示例不是有效的JSON代码。嗨,cyus,我相信它是有效的JSON(有一个额外的逗号,所以我刚刚添加了它),请修复“示例输入”,使其成为有效的JSON。您可能希望使用jq empty
进行验证,或者使用jsonlint.comhi peak,这实际上非常熟悉我试图获得理想输出的最佳尝试,但是是否有一种方法可以在最后将数字相加为2,而不是得到1您指的是哪个[]?在宠物后面的那个?如果是这种情况,我如何删除一套?至于编辑,单词Dog实际上出现在其他数据字段中,我删掉了它们以保持示例的简单性。我将更新问题中的示例输入以说明这一点。下面有两个后续出现的[]
:map({Animal:[].payload.Animal})| map(select(.Animal))[]]得到了它。使用这两款手机的感觉绝对不好,我只是想不出其他的方法,因为我没有经验。除此之外,考虑到样本输入并尝试实现样本输出,计数函数是否会因为“最喜爱的宠物”字段而过度计数?计数函数是最好的计数方法,但您必须决定要计数什么。
[.. | strings | select(. == "Dog")] | length
def count(s): reduce s as $x (0; .+1);
count(.. | strings | select(. == "Dog"))
count(.. | objects | (.Pets // []) | flatten[] | select(.=="Dog"))