我正在尝试计算与某些属性匹配的记录数。
如果我有像这样的 json:
[
{
"id": 0,
"count": 1
},
{
"id": 1,
"count": 1
},
{
"id": 2,
"count": 0
}
]
Run Code Online (Sandbox Code Playgroud)
我正在尝试获取计数为 1 的记录数。
我可以通过以下方式获取匹配的记录:
$ jq '.[] | select(.count == 1)' in.json
{
"id": 0,
"count": 1
}
{
"id": 1,
"count": 1
}
Run Code Online (Sandbox Code Playgroud)
但输出列出了两个项目,所以我无法直接使用length它们来计数。相反,使用长度给出每个项目的长度。
$ jq '.[] | select(.count == 1) | length' in.json
2
2
Run Code Online (Sandbox Code Playgroud)
如何计算 匹配了多少条记录select?
为了提高效率,应该避免length在构造数组上使用。相反,最好使用面向流的方法。
这是一种有效的解决方案,为了方便起见,它使用通用count函数,定义为:
def count(stream): reduce stream as $i (0; .+1);
Run Code Online (Sandbox Code Playgroud)
有了这个 def,解决方案就很简单:
count(.[] | select(.count==1))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3875 次 |
| 最近记录: |