Json jq-计算与选择匹配的项目数
我试图计算与某些属性匹配的记录数 如果我有类似的json:Json jq-计算与选择匹配的项目数,json,jq,Json,Jq,我试图计算与某些属性匹配的记录数 如果我有类似的json: [ { "id": 0, "count": 1 }, { "id": 1, "count": 1 }, { "id": 2, "count": 0 } ] 我正在尝试获取计数为1的记录数 我可以通过以下方式获得匹配的记录: $ jq '.[] |
[
{
"id": 0,
"count": 1
},
{
"id": 1,
"count": 1
},
{
"id": 2,
"count": 0
}
]
我正在尝试获取计数为1的记录数
我可以通过以下方式获得匹配的记录:
$ jq '.[] | select(.count == 1)' in.json
{
"id": 0,
"count": 1
}
{
"id": 1,
"count": 1
}
但是输出列出了两个项目,因此我不能直接使用length
来计算它们。相反,使用length给出每个项目的长度
$ jq '.[] | select(.count == 1) | length' in.json
2
2
如何计算select
匹配的记录数?使用.json中的jq'map(select(.count==1))| length'
参见jq
手册中的select
示例:为了提高效率,应避免在构造的数组上使用length
。相反,最好使用面向流的方法
这里有一个有效的解决方案,为了方便起见,它使用了通用的count
函数,定义如下:
def count(stream): reduce stream as $i (0; .+1);
使用此def,解决方案很简单:
count(.[] | select(.count==1))
诀窍是将所需内容转换为单个代表性数组,然后在该结构上使用length
。