在jq中可以使用+运算符添加对象
如果有数组
[
{
"a": "value"
},
{
"b": "value"
},
{
"c": "value"
}
]
我想将其转换为单个对象{a:“ value”,b:“ value”,c:“ value”} 我可以使用以下过滤器。[0] +。[1] +。[2],但我想在不指定所有索引的情况下对整个数组进行过滤。
答案 0 :(得分:3)
您可以使用reduce
:
reduce .[] as $o ({}; . + $o)
返回:
{
"a": "value",
"b": "value",
"c": "value"
}
答案 1 :(得分:3)
最简单的方法就是致电add
filter。
“过滤器
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)'