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