Shellで構築するSQL「ShellQL」を作ってみる #2「csv2json」

2015年8月19日

Shell テクノロジー プログラミング

CSVファイルをJSONファイルに変換するshellスクリプトです。

概要

csvとjsonの大きな違いは、csvは配列的なカラム情報に対して、jsonは連想配列的なカラム構造になる点だろう。 csvファイルのまま、レコード内でのカラムを配列にしてもいいのだが、それだとjson構造にする必要があまりないので、自動でkey値を付与する仕様とする。 また、key値は、任意でセットできるようにすることで、利便性を増すようにしたいと思う。

プログラム

#!/bin/bash #save-fileName saveFile="$1.json" ##column keys=(`echo $2 | tr -s ',' ' '`) while read line do ##shell # value-convert line=`echo $line | sed -e 's/\s/\&nbsp\;/g'` line=`echo $line | sed -e "s/\'/\&\#39\;/g"` line=`echo $line | sed -e 's/\"/\&\#34\;/g'` # set:array arr=(`echo $line | tr -s ',' ' '`) json="" for ((i=0;i< ${#arr[*]};i++)) do #key-check if [ -n "${keys[$i]}" ];then key=${keys[$i]} else key="key-$i" fi #echo "${key}:${arr[$i]}" #json-checl if [ -n "${json}" ];then json=$json",\"$key\":\"${arr[$i]}\"" else json="\"$key\":\"${arr[$i]}\"" fi done #print echo "{$json}" >> ${saveFile} done< $1

使い方

# 元ファイル「hoge.csv」 0,001,abcdefg,test1 0,002,hijklmn,test2 0,003,opqrstu,test3 # 処理実行 $ bash csv2json.sh hoge.csv flg,id,name,value,memo # 出力 「hoge.csv.json」 {"flg":"0","id":"001","name":"abcdefg","value":"test1"} {"flg":"0","id":"002","name":"hijklmn","value":"test2"} {"flg":"0","id":"003","name":"opqrstu","value":"test3"}

注意点

配列を使っているため、shではなくbashで対応してます。 起動コマンドで間違えないようにしましょう。 あと、今回使用できるCSVのの形式は、項目ないの改行や、"(クォーテーション)の対応をしていません。 あくまで「,(カンマ)」で区切られたレコードを分割するという事を前提にしています。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。