【问题标题】:How group and sum items using jq?如何使用 jq 对项目进行分组和求和?
【发布时间】:2018-02-28 12:24:13
【问题描述】:

我有以下 JSON:

{  
  "groupId1" : {
     "list" : [
       {
       "field1": "somevalue",
       "count": 2,
       "field3": "somevalue"
       },
       {
       "field1": "somevalue",
       "count": 3,
       "field3": "somevalue"
       }
     ]
   },
  "groupId2" : {
     "list" : [
       {
       "field1": "somevalue",
       "count": 0,
       "field3": "somevalue"
       },
       {
       "field1": "somevalue",
       "count": 4,
       "field3": "somevalue"
       }
     ]
   },     
 ...
}

我想要达到的结果(使用 jq)是:

[
  "groupId1":5,
  "groupId2":4
]

每个组只有一个“列表”元素。

我知道我应该使用 group by 和 sum,但我不能让它工作。

【问题讨论】:

标签: json jq


【解决方案1】:

这是在您的 ~/.jq 或 jq “标准库”中具有以下定义的情况之一:

def sigma(stream): reduce stream as $x (null; . + $x );

这样,你就可以写出可读性很强的东西了:

map_values( sigma(.list[] | .count ))

【讨论】:

    【解决方案2】:

    jq解决方案:

    jq '. as $o | [ keys_unsorted[] 
                    | {(.) : (reduce $o[.].list[] as $i (0; . + $i.count))} ] | add' file.json
    

    输出:

    {
      "groupId1": 5,
      "groupId2": 4
    }
    

    【讨论】:

      猜你喜欢
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 2015-09-09
      • 1970-01-01
      • 2020-08-06
      相关资源
      最近更新 更多