csvからjsonへ変換する(メモ1)

シーマークすずきです。

開発プロジェクトでいつも取り組むことのひとつが、プログラムのテストのために、テストデータを用意することです。ここでは、先日使ってみたcsvtojsonというライブラリがよく出来ていたので、簡単に紹介します。

■テストデータの元ネタはCSVで作っとく

テストデータをプログラマーが書くことは良くありますよね。入力データと結果期待値データ。プログラムに喰わせる訳ですから、プログラムが読み易いフォーマットが良いのですが、お客さんにレビューしてもらう都合上、お客さんには表計算ソフトの書式で出したいことが良くあります。そこでよく利用されるのはcsv書式です。

■csvtojsonが便利

先日も参加している開発チーム内で、テストプログラムを開発している担当者側はJSONで欲しい。テスト仕様書作成担当者は、表計算ソフトで作成中です、っと。つまり、どっかで誰かが、csvからjsonに変換する必要が発生しました。csvは構造を持たないフラット構造ですが、jsonは構造を持つための階層構造。ネットで少し調べていたら、 node.jsのライブラリでcsvtojsonがよく出来ていそうだったので、使ってみました。

参考URL: https://github.com/Keyang/node-csvtojson

■インストール

上記URLからgit cloneして利用できます。または、 npmでインストール可能です。

>npm install -g csvtojson

■動かしてみる

csvファイルのサンプルは以下のsample.csvです。

$ cat sample.csv
user.name, user.age, user.gender
suzuki,50,male
ange,12,female
seamark,20,male

変換してみましょう。

$ bin/csvtojson < sample.csv
[
{“user”:{“name”:”suzuki”,”age”:50,”gender”:”male”}}
,
{“user”:{“name”:”ange”,”age”:12,”gender”:”female”}}
,
{“user”:{“name”:”seamark”,”age”:20,”gender”:”male”}}

]

とっても簡単です。出力したくない列には、*omit* を指定すれば、jsonに変換しません。

$ cat sample.csv
user.name, user.age, *omit*user.gender
suzuki,50,male
ange,12,female
seamark,20,male

*omit*指定したuser.gender列は以下の通り変換されません。

$ bin/csvtojson < sample.csv
[
{“user”:{“name”:”suzuki”,”age”:50}}
,
{“user”:{“name”:”ange”,”age”:12}}
,
{“user”:{“name”:”seamark”,”age”:20}}

]

これのおかげで、テスト仕様書をレビュー後、直ぐにjson変換ができました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です