【问题标题】:Merging JSON files under their own key using jq使用 jq 在自己的密钥下合并 JSON 文件
【发布时间】:2019-03-05 11:31:10
【问题描述】:

尝试将未定义数量的 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 并不是很漂亮,但不确定是否有解决方法)。

【问题讨论】:

    标签: json bash file merge jq


    【解决方案1】:

    大致基于 peak's answer 使用输入和 -n 一次性读取 JSON 内容并从文件名中删除扩展名

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

    同样按照原作者的建议,上面的解决方案只删除了 UNIX 样式的路径,而不是 Windows 样式的路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-11
      • 2012-10-11
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      相关资源
      最近更新 更多