我有以下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
]
每个组只有一个“list”元素。
我明白我应该使用group by和sum,但是我无法让它工作。
答案 0 :(得分:1)
jq
解决方案:
jq '. as $o | [ keys_unsorted[]
| {(.) : (reduce $o[.].list[] as $i (0; . + $i.count))} ] | add' file.json
输出:
{
"groupId1": 5,
"groupId2": 4
}
答案 1 :(得分:0)
这是在〜/ .jq或jq“标准库”中有以下定义的情况之一:
def sigma(stream): reduce stream as $x (null; . + $x );
有了这个,你可以写出非常易读:
map_values( sigma(.list[] | .count ))