Слияние файлов JSON под их собственным ключом с помощью jq - PullRequest
0 голосов
/ 05 марта 2019

Попытка объединить неопределенное количество файлов 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 Ответ

1 голос
/ 05 марта 2019

Примерно на основе ответа пика используйте входные данные с -n для чтения содержимого JSON за один снимок и удаления расширения из имени файла

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

Также, как предложено оригиналомавтор, приведенное выше решение удаляет только пути в стиле UNIX, но не пути в стиле Windows.

...