使用 jq 对 JSON 进行分组和计数

问题描述

我正在尝试将以下 JSON 转换为具有每个唯一“名称”和总数(即该名称出现的次数)的 csv。

当前数据:

[
  {
    "name": "test"
  },{
    "name": "hello"
  },{
    "name": "hello"
  }
]

理想输出

[
    {
        "name": "hello","count": 2
    },{
        "name": "test","count": 1
    }
]

我已经尝试过 [.[] | group_by (.name)[] ],但出现以下错误

jq: error (at :11): 不能用字符串“name”索引字符串

JQ 播放链接https://jqplay.org/s/fWqNUii1b2

注意,我已经在使用 jq 将初始原始数据格式化为上述格式。请在此处查看 JQ 播放链接https://jqplay.org/s/PwwRYscmBK

解决方法

group_by(.name) 
    | map({name: .[0].name,count: length})   
[
  {
    "name": "hello","count": 2
  },{
    "name": "test","count": 1
  }
]

Jq▷Play


基于 OP 的 comment,使用以下 jq 过滤器来计算多个对象中的每个名称,其中 .name 嵌套。

map(.labels) 
    | map({name: .[0].name,count: length})

Jq▷Play

,
echo '[{"name": "test"},{"name": "hello"},{"name": "hello"}]' | jq 'group_by (.name)[] | {name: .[0].name,count: length}' | jq -s
[
  {
    "name": "hello","count": 1
  }
]