Go言語でCSVをJSONに変換する
公開日: today タグ:
golang

たまに、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 を用いて変換します。