如何使用 jq 将对象列表转换为列表对象?
How to transform list of objects into object of lists using jq?
假设我有一些 JSON 看起来像:
[
{"foo": "apple", "bar": 42},
{"foo": "pear", "bar": 13},
{"foo": "apple", "bar": 666}
]
我怎样才能把它变成类似这样的东西:
{
"apple": [42, 666],
"pear": [13],
}
将 bar
按 foo
分组?
到目前为止,我已经尝试使用 jq
的 group_by(...)
函数,它给了我:
[
[{"foo": "apple", "bar": 42}, {"foo": "apple", "bar": 666}],
[{"foo": "pear", "bar": 13}]
]
这是一个开始,但不是我想要的。
您可以使用 group_by
并在之后进行转换,即用 .foo
形成密钥并添加所有 .bar
的
group_by(.foo)[] | { (.[0].foo): [.[].bar] }
一个简单有效的解决方案将避免 group_by
,其实现目前需要排序操作:
reduce .[] as $x ({}; .[$x.foo] += [$x.bar])
假设我有一些 JSON 看起来像:
[
{"foo": "apple", "bar": 42},
{"foo": "pear", "bar": 13},
{"foo": "apple", "bar": 666}
]
我怎样才能把它变成类似这样的东西:
{
"apple": [42, 666],
"pear": [13],
}
将 bar
按 foo
分组?
到目前为止,我已经尝试使用 jq
的 group_by(...)
函数,它给了我:
[
[{"foo": "apple", "bar": 42}, {"foo": "apple", "bar": 666}],
[{"foo": "pear", "bar": 13}]
]
这是一个开始,但不是我想要的。
您可以使用 group_by
并在之后进行转换,即用 .foo
形成密钥并添加所有 .bar
的
group_by(.foo)[] | { (.[0].foo): [.[].bar] }
一个简单有效的解决方案将避免 group_by
,其实现目前需要排序操作:
reduce .[] as $x ({}; .[$x.foo] += [$x.bar])