Вопрос:

jq: объединить элементы массива из разных файлов в один массив

arrays jq

299 просмотра

2 ответа

956 Репутация автора

У меня есть серия файлов JSON, таких как эти:

[
  {
    "bent_general": "0",
    "bext_general": "0",
    "date_yyyymmdd": "20171104",
    "end_time": "2017-11-07T02:58:56",
    "householdid": "EAM2231"
  },
  {
    "bent_general": "2",
    "bext_general": "8",
    "date_yyyymmdd": "20171126",
    "end_time": "2017-12-07T05:58:56",
    "householdid": "EAM1234",
  }
]

Мне нужно объединить их в один большой файл с одинаковой структурой:

[
  {
    "data_from": "first_file"
  },
  {
    "data_from": "second_file"
  }
]

Я пытался: JQ-S. файл1 файл2

Но результат:

[
  [
    {
      "data_from": "first_file"
    }
  ]
  ,
  [
    {
      "data_from": "second_file"
    }
  ]
]

Любая идея приветствуется.

Автор: QLands Источник Размещён: 03.01.2018 05:06

Ответы (2)


1 плюс

38332 Репутация автора

Из вопроса не совсем ясно, каким должен быть ожидаемый результат, но похоже, что вы хотите объединить массивы.

Если это так, и если ваш список файлов - file1 file2 ..., то следующий вызов будет уместным:

jq add file1 file2 ...

ps В будущем, пожалуйста, следуйте инструкциям на http://stackoverflow.com/help/mcve минимальный полный проверяемый пример

Автор: peak Размещён: 03.01.2018 07:33

0 плюса

5007 Репутация автора

У меня была та же проблема, и я нашел свое решение на github: https://github.com/stedolan/jq/issues/805#issuecomment-109783967

Использование опции -s вернет массив, содержащий содержимое входных файлов JSON, которые, в вашем случае, также являются массивами. Это означает, что вам нужно распределить (… []) два уровня массива и собрать ([…]) результат.

jq -s '[.[][]]' a-*.json > manifest.json

Автор: KevinS Размещён: 22.05.2019 01:11
Вопросы из категории :
32x32