使用jq在自己的密钥下合并JSON文件

时间:2019-03-05 11:31:10

标签: json bash file merge jq

尝试将数量不确定的JSON文件合并为一个,每个文件都使用自己的密钥表示(使用jq)。

示例:

$ cat foo.json
{
  "test1":"Foo"
}
$ cat bar.json
{
  "test2":"Bar"
}
$ jq -s "{`ls | sed -r 's/\.json$/: \./' | tr '\n' ', ' | sed 's/.$//'`}" `ls`
{
  "foo": [
    {
      "test1": "Foo"
    },
    {
      "test2": "Bar"
    }
  ],
  "bar": [
    {
      "test1": "Foo"
    },
    {
      "test2": "Bar"
    }
  ]
}

我正在尝试输出:

{
  "foo": {
    "test1": "Foo"
  },
  "bar": {
    "test2": "Bar"
  }
}

例如:foo是第一个文件的名称,并且应该是最终输出中其内容的键。

(此外,我觉得对同一件事两次叫ls并不是很漂亮,但不确定是否有办法解决这个问题。)

1 个答案:

答案 0 :(得分:1)

大致基于peak's answer,将输入与-n一起使用即可一次读取JSON内容,并从文件名中删除扩展名

jq -n '
  [inputs
   | {(input_filename | gsub(".*/|\\.json$";"")): .}]
   | add' *.json

也如原始作者所建议的那样,上述解决方案仅删除UNIX样式的路径,而不删除Windows样式的路径。