jq如何将数组对象合并为单个对象

时间:2020-05-29 07:48:15

标签: jq

在jq中可以使用+运算符添加对象

如果有数组

 [
      {
        "a": "value"
      },
      {
        "b": "value"
      },
      {
        "c": "value"
      }
 ]

我想将其转换为单个对象{a:“ value”,b:“ value”,c:“ value”} 我可以使用以下过滤器。[0] +。[1] +。[2],但我想在不指定所有索引的情况下对整个数组进行过滤。

3 个答案:

答案 0 :(得分:3)

您可以使用reduce

reduce .[] as $o ({}; . + $o)

返回:

{
  "a": "value",
  "b": "value",
  "c": "value"
}

答案 1 :(得分:3)

最简单的方法就是致电add filter

“过滤器add将一个数组作为输入,并产生将相加后的数组元素作为输出。这可能意味着求和,连接或合并,具体取决于输入元素的类型数组-规则与+运算符的规则相同(如上所述)。“


来源:https://stedolan.github.io/jq/manual/#add

$ cat test.json 
[ 
    {
        "a": "value"
    },
    {
        "b": "value"
    },
    {
        "c": "value"
    }
 ]

$ jq 'add' test.json
{
  "a": "value",
  "b": "value",
  "c": "value"
}

正如peak在评论中所提到的,您甚至可以跳过用引号将add过滤器包装起来:

$ jq add test.json
{
  "a": "value",
  "b": "value",
  "c": "value"
}

答案 2 :(得分:0)

如果你想递归地合并数组中的所有对象(这里没有找到任何类似的答案):

jq 'reduce .[] as $x ({}; . * $x)'