Json 如何使用jq对项目进行分组和汇总?

Json 如何使用jq对项目进行分组和汇总?,json,jq,Json,Jq,我有以下建议: { "groupId1" : { "list" : [ { "field1": "somevalue", "count": 2, "field3": "somevalue" }, { "field1": "somevalue", "count": 3, "field3": "somevalue" } ] },

我有以下建议:

{  
  "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)是:

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


我知道我应该使用group by和sum,但我无法使用它。

jq
解决方案:

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

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

jq
解决方案:

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

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

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

def sigma(stream): reduce stream as $x (null; . + $x );
这样,您就可以编写非常可读的:

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

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

def sigma(stream): reduce stream as $x (null; . + $x );
这样,您就可以编写非常可读的:

map_values( sigma(.list[] | .count ))
可能的重复可能的重复