2019-03-01 2019-03-09Bash , JavaScript
はじめに JSON データをinputとして処理するテストコードを書きたかったが、参考にするテストデータが CSV フォーマットだったために簡単に変換できないかと探していたところ良いものを見つけました。
検証環境 必要なもの npm でインストールするツール&ライブラリのため、 Node.js の実行環境が必要です。
実行環境がない場合は Node Version Manager で Node.js がインストールできます。
( Redhut/Fedora/CentOSなら yum
、 Ubuntu/Debianなら apt-get
、 Macなら brew
を使ってインストールすることもできるが、以下の方法ならどの環境でもセットアップ可能。 )
csv2json
のインストールnpm
コマンドが使えるようになっていれば以下のコマンドでインストールが可能です。
使い方 実際に仕事で使用したCSVファイルをここに掲載することはできないので、サンプルデータを以下のサイトの機能を使って用意します。
ダウンロードした10件の疑似個人情報(CSV)は以下のようなものになっていました。
(例)personal_infomation.csv
このファイルに対して、 csv2json
コマンドを適用するとJSONデータが作成できます。
$ ls
personal_infomation.csv
$ cat personal_infomation.csv
連番,氏名,氏名(カタカナ),性別,電話番号,生年月日
1 ,浜崎陽治,ハマザキヨウジ,男,0238930217,1974/11/03
2 ,奥山隆雄,オクヤマタカオ,男,0888070241,1997/08/04
3 ,船越瑠奈,フナコシルナ,女,0986044637,1966/04/16
4 ,玉置忠治,タマキタダハル,男,0779869154,1995/07/19
5 ,出口美香,デクチミカ,女,0289679894,1991/10/18
6 ,西本良之,ニシモトヨシユキ,男,0855699116,1988/03/29
7 ,湯川麗奈,ユカワレナ,女,0997770517,1996/03/05
8 ,荻野莉沙,オギノリサ,女,073800935,1987/06/20
9 ,海野博明,ウミノヒロアキ,男,0888070499,1998/05/23
10 ,高崎淳一,タカサキジュンイチ,男,0559462109,1982/05/10
$ cat personal_infomation.csv | column -t -s,
連番 氏名 氏名(カタカナ) 性別 電話番号 生年月日
1 浜崎陽治 ハマザキヨウジ 男 0238930217 1974 /11/03
2 奥山隆雄 オクヤマタカオ 男 0888070241 1997 /08/04
3 船越瑠奈 フナコシルナ 女 0986044637 1966 /04/16
4 玉置忠治 タマキタダハル 男 0779869154 1995 /07/19
5 出口美香 デクチミカ 女 0289679894 1991 /10/18
6 西本良之 ニシモトヨシユキ 男 0855699116 1988 /03/29
7 湯川麗奈 ユカワレナ 女 0997770517 1996 /03/05
8 荻野莉沙 オギノリサ 女 073800935 1987 /06/20
9 海野博明 ウミノヒロアキ 男 0888070499 1998 /05/23
10 高崎淳一 タカサキジュンイチ 男 0559462109 1982 /05/10
$ cat personal_infomation.csv | csv2json
[
{ "連番" : "1" ,"氏名" : "浜崎陽治" ,"氏名(カタカナ)" : "ハマザキヨウジ" ,"性別" : "男" ,"電話番号" : "0238930217" ,"生年月日" : "1974/11/03" } ,
{ "連番" : "2" ,"氏名" : "奥山隆雄" ,"氏名(カタカナ)" : "オクヤマタカオ" ,"性別" : "男" ,"電話番号" : "0888070241" ,"生年月日" : "1997/08/04" } ,
{ "連番" : "3" ,"氏名" : "船越瑠奈" ,"氏名(カタカナ)" : "フナコシルナ" ,"性別" : "女" ,"電話番号" : "0986044637" ,"生年月日" : "1966/04/16" } ,
{ "連番" : "4" ,"氏名" : "玉置忠治" ,"氏名(カタカナ)" : "タマキタダハル" ,"性別" : "男" ,"電話番号" : "0779869154" ,"生年月日" : "1995/07/19" } ,
{ "連番" : "5" ,"氏名" : "出口美香" ,"氏名(カタカナ)" : "デクチミカ" ,"性別" : "女" ,"電話番号" : "0289679894" ,"生年月日" : "1991/10/18" } ,
{ "連番" : "6" ,"氏名" : "西本良之" ,"氏名(カタカナ)" : "ニシモトヨシユキ" ,"性別" : "男" ,"電話番号" : "0855699116" ,"生年月日" : "1988/03/29" } ,
{ "連番" : "7" ,"氏名" : "湯川麗奈" ,"氏名(カタカナ)" : "ユカワレナ" ,"性別" : "女" ,"電話番号" : "0997770517" ,"生年月日" : "1996/03/05" } ,
{ "連番" : "8" ,"氏名" : "荻野莉沙" ,"氏名(カタカナ)" : "オギノリサ" ,"性別" : "女" ,"電話番号" : "073800935" ,"生年月日" : "1987/06/20" } ,
{ "連番" : "9" ,"氏名" : "海野博明" ,"氏名(カタカナ)" : "ウミノヒロアキ" ,"性別" : "男" ,"電話番号" : "0888070499" ,"生年月日" : "1998/05/23" } ,
{ "連番" : "10" ,"氏名" : "高崎淳一" ,"氏名(カタカナ)" : "タカサキジュンイチ" ,"性別" : "男" ,"電話番号" : "0559462109" ,"生年月日" : "1982/05/10" }
]
$ cat personal_infomation.csv | csv2json | jq . | head -n 15
[
{
"連番" : "1" ,
"氏名" : "浜崎陽治" ,
"氏名(カタカナ)" : "ハマザキヨウジ" ,
"性別" : "男" ,
"電話番号" : "0238930217" ,
"生年月日" : "1974/11/03"
} ,
{
"連番" : "2" ,
"氏名" : "奥山隆雄" ,
"氏名(カタカナ)" : "オクヤマタカオ" ,
"性別" : "男" ,
"電話番号" : "0888070241" ,
ひとこと TSVや別の区切り文字にも対応しています。
JSONが1つの配列オブジェクトになるのが嫌であれば、以下のようにして行単位にオブジェクトを出力させることもできます。
$ cat personal_infomation.csv | csv2json | jq -c '.[]'
{ "連番" : "1" ,"氏名" : "浜崎陽治" ,"氏名(カタカナ)" : "ハマザキヨウジ" ,"性別" : "男" ,"電話番号" : "0238930217" ,"生年月日" : "1974/11/03" }
{ "連番" : "2" ,"氏名" : "奥山隆雄" ,"氏名(カタカナ)" : "オクヤマタカオ" ,"性別" : "男" ,"電話番号" : "0888070241" ,"生年月日" : "1997/08/04" }
{ "連番" : "3" ,"氏名" : "船越瑠奈" ,"氏名(カタカナ)" : "フナコシルナ" ,"性別" : "女" ,"電話番号" : "0986044637" ,"生年月日" : "1966/04/16" }
{ "連番" : "4" ,"氏名" : "玉置忠治" ,"氏名(カタカナ)" : "タマキタダハル" ,"性別" : "男" ,"電話番号" : "0779869154" ,"生年月日" : "1995/07/19" }
{ "連番" : "5" ,"氏名" : "出口美香" ,"氏名(カタカナ)" : "デクチミカ" ,"性別" : "女" ,"電話番号" : "0289679894" ,"生年月日" : "1991/10/18" }
{ "連番" : "6" ,"氏名" : "西本良之" ,"氏名(カタカナ)" : "ニシモトヨシユキ" ,"性別" : "男" ,"電話番号" : "0855699116" ,"生年月日" : "1988/03/29" }
{ "連番" : "7" ,"氏名" : "湯川麗奈" ,"氏名(カタカナ)" : "ユカワレナ" ,"性別" : "女" ,"電話番号" : "0997770517" ,"生年月日" : "1996/03/05" }
{ "連番" : "8" ,"氏名" : "荻野莉沙" ,"氏名(カタカナ)" : "オギノリサ" ,"性別" : "女" ,"電話番号" : "073800935" ,"生年月日" : "1987/06/20" }
{ "連番" : "9" ,"氏名" : "海野博明" ,"氏名(カタカナ)" : "ウミノヒロアキ" ,"性別" : "男" ,"電話番号" : "0888070499" ,"生年月日" : "1998/05/23" }
{ "連番" : "10" ,"氏名" : "高崎淳一" ,"氏名(カタカナ)" : "タカサキジュンイチ" ,"性別" : "男" ,"電話番号" : "0559462109" ,"生年月日" : "1982/05/10" }
※もっとも、 jq
コマンドだけで csv
をJSONに変換できるそうです。(T_T)
ディスカッション
コメント一覧
まだ、コメントがありません