7

我有一个 JSON 对象数组:

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

我想将它们简化为以下结构:

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

这可能与jq有关吗?

我在尝试:

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

这并不完全有效,因为它迭代每个数据而不是将其减少到一个对象。

4

3 回答 3

7

请注意, jq 有一个名为 'add' 的内置函数,与第一个答案所暗示的相同,因此您应该能够编写:

jq add myjson.json
于 2014-06-18T23:49:35.140 回答
3

要稍微扩展其他两个答案,您可以像这样将两个对象“添加”在一起:

.[0] + .[1]

=> { "key1": "value", "key2": "value" }

您可以使用通用reduce函数在列表的前两项之间重复应用函数,然后在该结果和下一项之间重复应用函数,依此类推:

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

我们从{}, add开始.[0],然后 add.[1]等等。

最后,为了方便起见,jq 有一个add函数,它本质上是这个函数的别名,所以你可以把整个事情写成:

add

或者,作为一个完整的命令行:

jq add myjson.json
于 2015-04-23T04:51:55.997 回答
0

我相信以下方法会起作用:

cat myjson.json | jq 'reduce .[] as $item ({}; . + $item)'

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

于 2014-04-23T09:58:33.337 回答