15

我有看起来像这样的 json 数据:

{"foo":"one", "bar":2, "baz":[0]}
{"foo":"two", "bar":3, "baz":[1]}
{"foo":"one", "bar":3, "baz":[2,3]}
{"foo":"one", "bar":2, "baz":[2,4]}

我想用相同的“foo”对所有内容进行分组并收集 bar 的唯一值,然后在“baz”数组中收集唯一值:

[
  {"foo":"one", "bar":[2, 3], "baz":[0,2,3,4]},
  {"foo":"two", "bar":[3], "baz":[1]}
]

(我不关心结果是在一个数组中还是只是一个由空格分隔的 JSON 对象的原始序列,我也不关心“baz”数组中项目的顺序)

我已经从源代码安装了 jq 1.4 版。我可以按“foo”正确分组并收集“bar”的唯一值:

jq -s 'group_by(.foo) | map({foo: .[0].foo, bar: map(.bar) | unique})'

产生:

[
  {"foo":"one","bar":[2,3]},
  {"foo":"two","bar":[3]}
]

但我不知道如何收集“baz”的独特值。

我错过了什么?

4

1 回答 1

12

编辑:不需要新的“ flatten ”功能(感谢@JeffMercado)

我可以跑

jq -s 'group_by(.foo) | map({foo: .[0].foo, bar: map(.bar) | unique, baz: map(.baz) | add | unique})

产生:

[
  {"foo":"one","bar":[2,3],"baz":[0,2,3,4]},
  {"foo":"two","bar":[3],"baz":[1]}
]
于 2014-09-30T20:32:41.170 回答