尝试将 json 转换为 csv 时,我通过以下jq
查询收到关于 null 的错误:
printf "[]" | jq -r '(map(keys) | add | unique) as $cols | map(. as $row | $cols | map($row[.])) as $rows | $cols, $rows[] | @csv'
它给出了以下错误,
jq: error (at <stdin>:0): Cannot iterate over null (null)
但如果 json 数组非空并且其中有一个对象,则可以正常工作:
$ printf '[{"a":1}]' | jq -r '(map(keys) | add | unique) as $cols | map(. as $row | $cols | map($row[.])) as $rows | $cols, $rows[] | @csv'
"a"
1
jq
语法看起来不错,但我刚开始使用这个工具时对它并不熟悉。
有人可以解释如何在数组为空时修补查询以不输出任何内容吗?(第一个例子)。
您可以使用错误抑制/可选运算符:?阻止以对抗空数组调用并返回而不向控制台抛出任何错误
where
.?
也可以使用try
catch 块显式编写,try .?
并在其后放置过滤器的其余部分。如果表达式失败,则跳过可选运算符之后的过滤器部分。