json jq - count匹配select的项目数

vptzau2j  于 2023-05-08  发布在  其他
关注(0)|答案(3)|浏览(190)

我正在尝试计算与某个属性匹配的记录数。
如果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匹配了多少条记录?

3mpgtkmj

3mpgtkmj1#

为了提高效率,应该避免在构造的数组上使用length。相反,最好使用面向流的方法。
这里有一个有效的解决方案,为了方便起见,它使用了通用的count函数,定义为:

def count(stream): reduce stream as $i (0; .+1);

有了这个def,解决方案很简单:

count(.[] | select(.count==1))
zf9nrax1

zf9nrax12#

使用jq 'map(select(.count==1))|length' in.json
参见jq手册中的select示例:https://stedolan.github.io/jq/manual/#select(boolean_expression)

kq4fsx7k

kq4fsx7k3#

尝试将select括在方括号[]中。

jq '.[] | [select(.count == 1)] | length' in.json

我认为这是最简单的答案,与已经给出的答案相比。

相关问题