连接 JSON 个文件时排除空输入

Exclude null inputs while concatenating JSON files

我希望使用 jq 将目录中的多个 JSON 文件连接起来。 大多数 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 扫描的输出而生成的,我无法控制输出是什么。

如果其他人以前遇到过这个问题,请帮助我。

只需 select 个数组输入。

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

Online demo

如果您不想排除所有非数组而只想排除 null.

,请使用 select(. != null) 而不是 arrays