0
我正在將大約200 000個Json對象存儲到CSV文件中。但問題是任何2個JSON對象可能不同(具有不同的鍵名稱)。將JSON轉換爲CSV
我想過創建一個HashSet並遍歷所有對象,以便獲取CSV文件的列名。但是這個過程顯然需要太多時間。
是否有另一種動態添加列到CSV文件的方法?
我正在將大約200 000個Json對象存儲到CSV文件中。但問題是任何2個JSON對象可能不同(具有不同的鍵名稱)。將JSON轉換爲CSV
我想過創建一個HashSet並遍歷所有對象,以便獲取CSV文件的列名。但是這個過程顯然需要太多時間。
是否有另一種動態添加列到CSV文件的方法?
一種方法將是使用jq
(「類JSON查詢」):
def tocsv:
if length == 0 then empty
else
(.[0] | keys_unsorted) as $keys
| (map(keys) | add | unique) as $allkeys
| ($keys + ($allkeys - $keys)) as $cols
| ($cols, (.[] as $row | $cols | map($row[.])))
| @csv
end ;
tocsv
例如,假定上述的是在一個文件名爲json2csv.jq並且該輸入是在in.json:
jq -r -f json2csv.jq in.json
上述程序通過從第一個對象的鍵名(按它們出現的順序)開始構造標題行,然後根據需要擴展標題行。
更多關於JQ,看到https://stedolan.github.io/jq
另一種方法是使用in2csv
,將csvkit的無線工具包的一部分 - 見https://csvkit.readthedocs.org