json - jq中的"Transposing"对象

标签 json transpose relation jq

我不确定“转置”在这里是否是正确的术语,但我希望使用 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/

相关文章:

javascript - 图像未从我的 json 文件加载

javascript - 如何使用 jquery .when 访问 json 数据以附加到页面?

javascript - 使 gif 出现在单击按钮上

python - 是否有 pandas 函数来转置数据框,为现有列的每个唯一值创建一个单独的列?

gridview - yii2 gridview 未使用 hasMany 关系显示所有左连接值

mysql - 为什么需要从实体到同一实体的关系表

java - 无法使用 POST 请求发送 JSON

google-sheets - Google 表格 - 将不规则的列数据分组转置为行

list - 在没有 Maybe 的情况下在 Elm 中转置

php - 网络应用程序 : How to save user's "likes" properly?