使用jq减少JSON

时间:2014-04-03 14:58:52

标签: unix jq

我有一个对象的JSON数组:

[{key1: value},{key2:value}, ...]

我想将这些减少到以下结构中:

{key1: value, key2: value, ...} 

这可能与jq有关吗?​​

我在尝试:

cat myjson.json | jq '.[] | {(.key): value}'

这并不是很有效,因为它遍历每个数据而不是将其缩减为一个对象。

3 个答案:

答案 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)'

它接受数组中的每个项目,并将其添加到所有先前项目的总和中。