Waf*_*ffy 11 arrays bash json jq
所以我的目标是合并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错误:
无法迭代null.
即使我添加一个随机元素,也会出现相同的错误.关于我应该如何进行的提示?jq中还有其他工具可以帮助实现合并数组吗?
Jan*_*nou 13
让我也提供一下标题所要求的内容,因为我相信很多遇到这个问题的人都在寻找更简单的东西:
echo -e '["a","b"]\n["c","d"]' | jq '.[]' | jq -s
[
"a",
"b",
"c",
"d"
]
注意:以上代码也适用于对象数组。
zep*_*lin 11
您可以使用add(jq 1.3+)合并文件:
jq -s '.[0].list=[.[].list|add]|.[0]' *.json
或扁平化(jq 1.5+):
jq -s '.[0].list=([.[].list]|flatten)|.[0]' *.json
[.[].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"
    }
  ]
}
假设每个文件都具有相同title的list内容而您只是组合内容,则可以执行以下操作:
$ jq 'reduce inputs as $i (.; .list += $i.list)' blahblah.json blueblue.json
这只是获取第一个项目并添加到其列表中,所有其他输入的列表.
| 归档时间: | 
 | 
| 查看次数: | 8701 次 | 
| 最近记录: |