Как сгруппировать в JQ? - PullRequest
       3

Как сгруппировать в JQ?

1 голос
/ 01 февраля 2020

Вот документ json

[
    {"name": "bucket1","clusterName":"cluster1"},
    {"name": "bucket2","clusterName":"cluster1"},
    {"name": "bucket3","clusterName":"cluster2"},
    {"name": "bucket4","clusterName":"cluster2"}
]

И я хочу преобразовать его в

[
{"clusterName": "cluster1", buckets:[{"name": "bucket1"}, {"name": "bucket2"}]},
{"clusterName": "cluster2", buckets:[{"name": "bucket1"}, {"name": "bucket2"}]},
]

Как мне это сделать в jq?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2020

Использование map дает довольно аккуратный ответ:

group_by(.clusterName)
| map( {clusterName: .[0].clusterName,
        buckets: map( {name} ) } )
0 голосов
/ 01 февраля 2020
cat doc.json | jq '[group_by(.clusterName)[] | { clusterName: .[0].clusterName, "buckets": [.[] | { name: .name } ]}]'

Должен делать то, что вы хотите. Теперь и с массивом вокруг.

...