当尝试将 json 转换为 csv 时,我收到有关 null 的错误,查询如下jq
:
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
看起来不错,但我不太熟悉,因为我刚刚开始使用这个工具。
有人可以解释一下如何修补查询以在数组为空时不输出任何内容吗? (第一个例子)。
答案1
您可以使用错误抑制/可选运算符:?阻止空数组调用并返回,而不向控制台抛出任何错误,如下所示
printf '[]' | jq -r '.? |(map(keys) | add | unique) as $cols | map(. as $row | $cols | map($row[.])) as $rows | $cols, $rows[] | @csv'
where也可以使用catch 块 as.?
显式编写,并让过滤器的其余部分跟随在其后面。如果表达式失败,则跳过可选运算符之后的过滤器部分。try
try .?