Json jq-计算与选择匹配的项目数

Json jq-计算与选择匹配的项目数,json,jq,Json,Jq,我试图计算与某些属性匹配的记录数 如果我有类似的json: [ { "id": 0, "count": 1 }, { "id": 1, "count": 1 }, { "id": 2, "count": 0 } ] 我正在尝试获取计数为1的记录数 我可以通过以下方式获得匹配的记录: $ jq '.[] |

我试图计算与某些属性匹配的记录数

如果我有类似的json:

[
  {
    "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