合并JSON的数组 [英] Merge Arrays of JSON

查看:15
本文介绍了合并JSON的数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我的目标是合并json文件,获得以下格式:

{
  "title": "NamesBook",
  "list": [
    {
      "name": "Ajay"
    },
    {
      "name": "Al"
    }
  ]
}

我有如下格式的文件:

blahblah.json

{
  "title": "NamesBook",
  "list": [
    {
      "name": "Ajay"
    }
  ]
}

BlueBlue.json

{
  "title": "NamesBook",
  "list": [
    {
      "name": "Al"
    }
  ]
}

我可以使用以下内容将我所有姓名的列表数组存储在一个变量中:

x = jq -s '.[].list' *.json

然后我计划将变量追加到我创建的文件out.json中的一个空数组中,如下所示:

{
  "type": "NamesBook",
  "list": []
}

但是,当我的脚本超出行时

jq '.list[] += "$x"' out.json'

出现JQ错误:

无法循环访问空值。

即使在添加随机元素时,也会出现相同的错误。关于我应该如何进行的小贴士?JQ中还有其他工具可以帮助实现数组合并吗?

推荐答案

您可以使用添加(JQ1.3+)合并您的文件:

jq -s '.[0].list=[.[].list|add]|.[0]' *.json

展平(JQ 1.5+):

jq -s '.[0].list=([.[].list]|flatten)|.[0]' *.json

[.[].list]-创建包含所有"list"数组的数组

 [
  [
    {
      "name": "Ajay"
    }
  ],
  [
    {
      "name": "Al"
    }
  ]
]

[.[].list]|flatten-展平(或.[].list|add-将所有数组加在一起)

[
  {
    "name": "Ajay"
  },
  {
    "name": "Al"
  }
]

.[0].list=([.[].list]|flatten)|.[0]-用合并后的列表替换第一个"列表",并将其输出。

{
  "title": "NamesBook",
  "list": [
    {
      "name": "Ajay"
    },
    {
      "name": "Al"
    }
  ]
}

这篇关于合并JSON的数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆