С вашим вводом следующая программа выдает действительный JSON в духе вопроса:
def sum_by(f;g): reduce .[] as $x ({}; .[$x|f] += ($x|g));
.frames |= sum_by(.description; .amount)
Использование sum_by
более эффективно, чем использование group_by
по различным причинам.
Выход
{
"frames": {
"Stuff": 12,
"other_stuff": 2,
"more_stuff": 20
}
}
Вариант
Если вы хотите, чтобы description
и amount
на выходе, вы могли настроить вышеуказанное следующим образом:
.frames |=
(sum_by(.description; .amount)
| to_entries
| map( {description: .key, amount: .value} ))
вывод будет тогда:
{
"frames": [
{
"description": "Stuff",
"amount": 12
},
{
"description": "other_stuff",
"amount": 2
},
{
"description": "more_stuff",
"amount": 20
}
]
}