Исключить пустые входные данные при объединении файлов JSON

Я хочу объединить несколько файлов JSON в каталоге, используя jq. Большинство файлов JSON выглядят так

      [
  {
    a: 12,
    b: 22,
    c: []
  }
]

Поэтому для их объединения я использую следующий запрос jq

      jq -s '[.[]|.[ ]]' *.json > xyz.json

Кажется, это работает нормально, и я получаю ожидаемый конкатенированный вывод, пока он не встретит файл JSON, в котором просто записано значение null, и когда я пытаюсь объединить это с другими, я получаю сообщение об ошибке.

      $ cat test.json
  null
$ jq -s '[.[]|.[ ]]' xyz.json test.json > y.json
jq: error (at test.json:0): Cannot iterate over null (null)

Есть ли способ исключить этот нулевой файл JSON при объединении через каталог?

Я должен упомянуть, что эти файлы JSON генерируются как выходные данные для различных сканирований Trivy Image , и я не могу контролировать их вывод.

Если кто-то еще сталкивался с этой проблемой ранее, пожалуйста, помогите мне.

1 ответ

Просто выберите входы массива.

      jq -n '[inputs | arrays[]]' *.json

Онлайн-демонстрация

Использовать select(. != null)вместо arraysесли вы не хотите исключать все не-массивы, а только null.

Другие вопросы по тегам