Go言語でCSVをJSONに変換する
たまに、CSV データを JSON 形式に変換したくなることがあります。 というのも、元データとしていただくのは大抵 Excel ファイルで、 とりあえず CSV にエクスポートしただけでは使いにくいからです。
それくらいWeb上のツールであるんじゃないの? とちょっと検索してみたところ、セルに改行を含むケースに対応しているものが見つからなかったので、 Go 言語で実装してみました。
環境を整えてある方なら以下のコマンドで実行ファイルをインストールできます。
go install github.com/tmrtmhr/csv2json
入力としては以下のようなものを想定しています。
col1 col2 col3
1 2 3
4 "5
67" 8
9 10 11
出力は以下のようになります。ヘッダ行がキーになり、値はすべて文字列です。
[
{
"col1": "1",
"col2": "2",
"col3": "3"
},
{
"col1": "4",
"col2": "5\n67",
"col3": "8"
},
{
"col1": "9",
"col2": "10",
"col3": "11"
}
]
実装上の知見
CSV の parse については標準パッケージ encoding/csv
に任せられます。
なので改行を含むセルなどについて自前での実装は不要です。
encoding/csv
のCSVリーダでは区切り文字をComma
で指定できますが、ここには rune
を設定する必要があります。
コマンド引数-delimiter="\t"
で区切り文字を渡した場合、
Go 上では \
と t
の二文字として得られるため、
strconv.UnquoteChar
を用いて変換します。