我有一个对象的JSON数组:
[{key1: value},{key2:value}, ...]
我想将这些减少到以下结构中:
{key1: value, key2: value, ...}
这可能与jq有关吗?
我在尝试:
cat myjson.json | jq '.[] | {(.key): value}'
这并不是很有效,因为它遍历每个数据而不是将其缩减为一个对象。
答案 0 :(得分:6)
请注意,jq有一个名为'add'的内置函数,与第一个答案所暗示的相同,所以你应该能够写:
jq add myjson.json
答案 1 :(得分:1)
要稍微扩展另外两个答案,你可以像这样“添加”两个对象:
.[0] + .[1]
=> { "key1": "value", "key2": "value" }
您可以使用通用reduce
函数在列表的前两项之间重复应用函数,然后在该结果与下一项之间重复应用,依此类推:
reduce .[] as $item ({}; . + $item)
我们从{}
开始,添加.[0]
,然后添加.[1]
等。
最后,为方便起见,jq有一个add
函数,它本质上就是这个函数的别名,所以你可以把整个函数写成:
add
或者,作为一个完整的命令行:
jq add myjson.json
答案 2 :(得分:0)
我相信以下内容可行:
cat myjson.json | jq 'reduce .[] as $item ({}; . + $item)'
它接受数组中的每个项目,并将其添加到所有先前项目的总和中。