gpt4 book ai didi

json - jq中的"Transposing"对象

转载 作者:行者123 更新时间:2023-12-02 05:48:39 27 4
gpt4 key购买 nike

我不确定“转置”在这里是否是正确的术语,但我希望使用 jq 转置一个二维对象,如下所示:

[
{
"name": "A",
"keys": ["k1", "k2", "k3"]
},
{
"name": "B",
"keys": ["k2", "k3", "k4"]
}
]

我想将其转换为:

{
"k1": ["A"],
"k2": ["A", "B"],
"k3": ["A", "B"],
"k4": ["A"],
}

我可以用 .[] | 拆分对象{key: .keys[], name} 来获取键和名称的列表,或者我可以使用 .[] | {(.keys[]): [.name]} 获取键值对的集合 {"k1": ["A"]} 等等,但我我不确定这两种方法的最终串联步骤。

这两种方法是否都朝着正确的方向发展?有更好的办法吗?

最佳答案

这应该有效:

map({ name, key: .keys[] })
| group_by(.key)
| map({ key: .[0].key, value: map(.name) })
| from_entries

基本方法是将每个对象转换为名称/ key 对,按 key 重新组合它们,然后将它们映射到对象的条目。

这会产生以下输出:

{
"k1": [ "A" ],
"k2": [ "A", "B" ],
"k3": [ "A", "B" ],
"k4": [ "B" ]
}

关于json - jq中的"Transposing"对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32357240/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com