сгруппировать и создать преобразованный вывод JSON - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть данные, которые выглядят следующим образом, и мне нужно их преобразовать.

[{"us":{"$event":"5bbf4a4f43d8950b5b0cc6d2"},"org":"TΙ UIH","rc":{"$event":"13"}},
{"us":{"$event":"5bbf4a4f43d8950b5b0cc6d3"},"org":"TΙ UIH","rc":{"$event":"13"}},
{"us":{"$event":"5bbf4a4f43d8950b5b0cc6d4"},"org":"AB KIO","rc":{"$event":"13"}},
{"us":{"$event":"5bbf4a4f43d8950b5b0cc6d5"},"org":"GH SVS","rc":{"$event":"17"}}]

что я использую:

`[group_by(.org, .rc."$event")[] | [.[0].rc."$event", .[0].org, length]] |` sort_by(.[0])[] 

вывод, который я получаю:

[
  "13",
  "AB KIO",
  1
]
[
  "17",
  "GH SVS",
  1
]
[
  "13",
  "TΙ UIH",
  2
]

Как я могу получить следующий формат в качестве вывода?

key1: ["",""]
key2: ["",""]

где каждый ключ указывает номер события, а в массиве у нас есть уникальные значения организации каждого события.

вывод 13: ["AB KIO", "TΙ UIH"] 17: ["GH SVS"]

1 Ответ

0 голосов
/ 27 ноября 2018
def aggregate_by(f; g):
  reduce .[] as $x  ({}; .[$x|f] += [$x|g]);

map( {rc: (.rc|.["$event"]), org} )
| aggregate_by(.rc; .org)
| map_values(unique)

Если ваш пример ввода был изменен, чтобы сделать его массивом JSON, приведенная выше программа jq выдаст:

{"13":["AB KIO","TΙ UIH"],"17":["GH SVS"]}

Конечно, возможны многие варианты, но есть кое-что, что нужно сказать для отсрочкиuniquification.

...