jq如何合并多个数组?

Neo*_*aid 3 json jq

我有以下数据,多个jq管道的输出:

 [
   {
     "Russia": 1073849
   }
 ]
 [
   {
     "Spain": 593730
   }
 ]
 [
   {
     "France": 387252
   }
 ]
 [
   {
     "UK": 371125
   }
 ]
Run Code Online (Sandbox Code Playgroud)

我想要的输出是:

 [
   {
     "Russia": 1073849
   },
   {
     "Spain": 593730
   },
   {
     "France": 387252
   },
   {
     "UK": 371125
   }
 ]
Run Code Online (Sandbox Code Playgroud)

基于我尝试过的类似问题'.[]|transpose|map(add)',它给出了一个错误:Cannot index object with number。我也不能group_by(key),因为对象中没有公共键。

cus*_*der 6

假设input.json文件是​​:

[{"Russia": 1073849}]
[{"Spain": 593730}]
[{"France": 387252}]
[{ "UK": 371125}]
Run Code Online (Sandbox Code Playgroud)

然后这个:

jq -s 'reduce .[] as $x ([]; . + $x)' input.json
Run Code Online (Sandbox Code Playgroud)

返回:

[
  {
    "Russia": 1073849
  },
  {
    "Spain": 593730
  },
  {
    "France": 387252
  },
  {
    "UK": 371125
  }
]
Run Code Online (Sandbox Code Playgroud)

笔记:

  • jq可以使用运算符合并数组+,例如[1]+[2]returns [1,2]。
  • 该-s标志读取input.json所有条目并将其放入数组中。所以你最终得到了一个可以与 合并的数组数组reduce。

这可以进一步简化:

jq -s 'add' input.json
Run Code Online (Sandbox Code Playgroud)