【问题标题】:accumulate an array of key-value pairs into a single object将一组键值对累积到一个对象中
【发布时间】:2020-04-12 10:52:42
【问题描述】:

如何使用jq 来转换它:

[
  {
    "k": "a",
    "v": 123
  },
  {
    "k": "b",
    "v": 456
  }
]

进入这个:

{
  "a": 123,
  "b": 456
}

【问题讨论】:

  • 你知道,这个网站是关于学习的。您应该提供您之前尝试过的示例,以便我们进一步为您提供帮助。

标签: json object jq


【解决方案1】:

重新构建每个对象,然后add 将它们全部重新构建成一个大的单一对象。

map({(.k): .v}) | add

如果您的输入是大型数据集,reduce 在性能方面可能是更好的选择。

reduce .[] as {$k,$v} ({}; . + {($k): $v})

【讨论】:

  • 就我个人而言,我只会直接分配属性,而不是添加单个属性对象。我想这会更有效率,因为您没有要检查的对象来进行合并。
【解决方案2】:

另一种选择,因为您的对象类似于条目的结构,您可以将它们映射为那些键/值对并以这种方式转换为对象。

map({key: .k, value: .v}) | from_entries

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-05
    • 1970-01-01
    • 2013-07-22
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 2018-10-09
    相关资源
    最近更新 更多