を、awkで。
例えば、こういう店舗情報が書かれたCSVがあって、
001,○×店,東京都杉並区XXXXXX 002,△△カフェ,東京都千代田区XXXXX 003,□□店,神奈川県横浜市XXXXXXXXXXXXX 004,×××,千葉県千葉市XXXX
これを、JSON形式のファイルへ変換したいとする。
awkワンライナーでCSVファイルをJSON形式に変換する
書き方は、こんな感じ。
$ awk 'BEGIN {FS=","; json = "[";} {json = json "{\"code\":\"" $1 "\",\"shop\":\"" $2 "\",\"address\":\"" $3 "\"},\n";} END {sub(/,\n$/, "", json); json = json "]\n"; print json}' data.csv
簡単に解説すると、「FS=","」にて、CSV形式のファイルを読み込むようにし、BEGINブロックでjson変数に初めの"["を格納。
後は、ファイルの各行を読みながらそれぞれのキーとデータをjson変数に取り込んでいく。
最後にENDブロックのsub()にて、余剰なカンマを取り除く処理をして出力ってな感じです。
本当は、最後の行の処理であればカンマをつけないという処理をしたいのですが、awkではファイルの行数を最初から読み込むことができない模様。
(一度、ブロック内でループさせてやれば可能だが余計な処理となるため、少し力技)
出力結果はこんな感じ。
[{"code":"001","shop":"○×店","address":"東京都杉並区XXXXXX"}, {"code":"002","shop":"△△カフェ","address":"東京都千代田区XXXXX"}, {"code":"003","shop":"□□店","address":"神奈川県横浜市XXXXXXXXXXXXX"}, {"code":"004","shop":"×××","address":"千葉県千葉市XXXX"}]
余計なタブとか改行を入れていないので見難いですが、CSV形式のファイルからJSON形式に一発変換することができます。
FireFoxアドオンのJSONView で見てみると
ただ、データが全て文字型として出力している(""で括っている)ので、数値型で出力したい場合は該当箇所を適宜変更してください。
あと、CSVファイルがUnicode以外であった場合は、処理前か後かでコンバートしておく必要もあります。
[PR]hpのノートブックPC お買い得キャンペーン情報!!
[PR]So-netでauひかり!今なら20,000円キャッシュバックキャンペーン実施中!
[PR]★ロリポップ!★WordPressやMovableTypeの簡単インストール、cron、共有SSL対応!
[PR]So-netでauひかり!今なら20,000円キャッシュバックキャンペーン実施中!
[PR]★ロリポップ!★WordPressやMovableTypeの簡単インストール、cron、共有SSL対応!
関連記事
ノンプログラミングでも利用可能!PHPで多様なグラフを作れるpChart
ものすごい数のアタックを受けているようなのでその際のユーザー名を晒す
ImageMagickを使ってコマンドラインからCAPTCHAを作ってみる
簡単にファイル検索をするためのlocateコマンドオリジナル活用法
inotifyを使ってファイルやディレクトリに起きたイベントを簡単に監視する