我的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&中项目的顺序#34;数组)
我从源代码安装了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"的独特价值。
我错过了什么?
答案 0 :(得分:5)
修改:不需要新的“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]}
]