我正在尝试计算用户ID 4发布的帖子
这是我到目前为止所拥有的
curl -s 'http://jsonplaceholder.typicode.com/posts' | jq '.[] |select(.userId==4) | length'
输出:
4
4
4
4
4
4
4
4
4
4
数据可以在网址找到,但这里有一个快速的样本
[
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
},
{
"userId": 1,
"id": 2,
"title": "qui est esse",
"body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla"
},
{
"userId": 1,
"id": 3,
"title": "ea molestias quasi exercitationem repellat qui ipsa sit aut",
"body": "et iusto sed quo iure\nvoluptatem occaecati omnis eligendi aut ad\nvoluptatem doloribus vel accusantium quis pariatur\nmolestiae porro eius odio et labore et velit aut"
}]
我知道userId 4有10个帖子所以它拿起它我觉得长度部分有问题吗?
它应该只计算userId的帖子并显示10
的答案编辑::如果你认为这个问题是可以接受的,请你进行投票,这样我就能获得声誉等等。
答案 0 :(得分:1)
试试这个:
$ curl -s 'http://jsonplaceholder.typicode.com/posts' |
jq '[ .[] |select(.userId==4) ] | length'
10
外部[ ]
将命令结果转换为可以应用length
的数组。
答案 1 :(得分:0)
由于您要在每行打印userId:4的每个实例,您可以将其传送到wc -l
以获取计数。
curl -s 'http://jsonplaceholder.typicode.com/posts' | jq '.[] |select(.userId==4) | length' | wc -l
output: 10
答案 2 :(得分:0)
一个非常短的替代方案:
map(select(.userId==4))|length
一个方便的def
可以保留(可能在〜/ .jq中):
def count(s): reduce s as $i (0; .+1);
您可以使用的过滤器是:
count(.[]|select(.userId==4))
(少了一个非空白字符: - )
答案 3 :(得分:0)
以下是使用reduce的解决方案:
jq 'reduce .[] as $i(0;if $i.userId==4 then .+1 else . end)' \
<(curl -s http://jsonplaceholder.typicode.com/posts)
答案 4 :(得分:-1)
您也可以尝试:
curl -s 'http://jsonplaceholder.typicode.com/posts' | jq 'group_by(.userId)|.[]|{userId: .[0].userId, count: (.|length)}|select(.userId==4)'
以更通用的方式,您可以使用:
curl -s 'http://jsonplaceholder.typicode.com/posts' | jq 'group_by(.userId)|.[]|{userId: .[0].userId, count: (.|length)}'
计算每个userId的帖子,另一个变体可以是:
curl -s 'http://jsonplaceholder.typicode.com/posts' | jq 'group_by(.userId)|map({(.[0].userId|tostring): (.|length)})'
以格式[{userId: count},...]