Ubuntu
使用 jq 將 json 轉換為 csv 時處理 null(空數組)?
嘗試將 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
語法看起來不錯,但我剛開始使用這個工具時對它並不熟悉。有人可以解釋如何在數組為空時修補查詢以不輸出任何內容嗎?(第一個例子)。
您可以使用錯誤抑制/可選運算符:?阻止以對抗空數組呼叫並返回而不向控制台拋出任何錯誤
printf '[]' | jq -r '.? |(map(keys) | add | unique) as $cols | map(. as $row | $cols | map($row[.])) as $rows | $cols, $rows[] | @csv'
where
.?
也可以使用try
catch 塊顯式編寫,try .?
並在其後放置過濾器的其餘部分。如果表達式失敗,則跳過可選運算符之後的過濾器部分。