分组并创建转换后的json输出

时间:2018-11-27 16:27:18

标签: json group-by jq

我有如下数据 我需要对其进行改造。

[{"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”,“ TUIH”] 17:[“ GH SVS”]

1 个答案:

答案 0 :(得分:0)

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"]}

当然可以有很多变化,但是要推迟唯一化还需要说些什么。