見出し画像

JSONファイルを文字列置換でCSV形式に変換してみた

今回は豆知識レベルか少し疑問ですが、Linux(CentOS7)環境JSONファイルをCSV形式に変換する作業風景をご紹介します。
Linuxは馴染みのない方も多いかも知れませんが、Macでも類似の処理ができます。全くそのまま使える訳ではありませんが、興味ある方の調べるきっかけになれば幸いです。

今回の題材

為替情報(JSON)を提供してくれるAPIがあります。
https://api.exchangeratesapi.io/latest

画像9

今回はこのレスポンスをCSVに変換してみます。

変換前(JSON)のイメージ

{"rates":{"CAD":1.5336,"HKD":8.7396,"ISK":159.0,"PHP":55.794,"DKK":7.4483,"HUF":353.7,"CZK":26.691,"AUD":1.6247,"RON":4.8428,"SEK":10.398,"IDR":16276.91,"INR":84.841,"BRL":6.0691,"RUB":80.2104,"HRK":7.5345,"JPY":120.48,"THB":35.316,"CHF":1.0625,"SGD":1.5703,"PLN":4.4743,"BGN":1.9558,"TRY":7.7417,"CNY":7.8952,"NOK":10.7163,"NZD":1.7189,"ZAR":19.0889,"USD":1.1276,"MXN":25.6953,"ILS":3.9006,"GBP":0.8957,"KRW":1354.7,"MYR":4.8109},"base":"EUR","date":"2020-07-10"}

変換後(CSV)のイメージ

日付を1行目に表示して、2行目以降で通貨名とレートを2列で表示しようと思います。

2020-07-10
CAD,1.5336
HKD,8.7396
...
MYR,4.8109

為替情報(JSON)の取得

データの取得にはcurlコマンドというものを使います。

画像10

改行はありませんが、ブラウザで見たのと同じように為替情報(JSON)が取得できました。
このレスポンスをファイルに書き込みます。ファイル名は response としておきます。

画像10

一応ファイルの中身の確認もしています、問題ありませんね。

日付部分の抽出

ではこのファイルから日付部分を抽出します。
今回は文字列置換で抽出します。文字列の置換にはsedコマンドというものを使います。
"date":"2020-07-10" の右側だけがほしいので、その他の部分は全部削除する置換をします。

画像9

これで日付部分が取得できました。
ややこしく見えるので少しだけ解説します。
sedコマンドで正規表現を使って文字を置き換えることができます。
置換対象になる部分を表すパターンが 

.*"date":"\([^"]*\).*

です。
何に置き換えるかを指定しているのが

\1\n

です。
このように指定することで「2020-07-10」の部分だけ取り出すことができます。(さらに詳しく知りたい方向け キーワード: sed 正規表現 後方参照)

通貨レート部分の抽出

次に通貨の部分を抽出します。
日付と同様に
"rates":{"CAD":1.5336,"HKD":8.7396,...,"MYR":4.8109}の右側だけほしいので、その他の部分は全部削除する置換をします。

画像9

これで抽出はできました。ここからさらに「,」の位置で改行したいので、さきほどのコマンドに

-e 's/,/\n/g'

を追加します。

画像9

さらに「:」はカンマにしたいので、

-e 's/:/,/g'

を追加します。
また、「"CAD":1.5336」の左側を括っている「"」は除去したいので、

-e 's/"//g'

も追加します。

画像9

これでほしい形になりました。

まとめ

為替情報(JSON)を取得するコマンドは

cat https://api.exchangeratesapi.io/latest > response

日付を抽出するコマンドは

sed 's/.*"date":"\([^"]*\).*/\1\n/' response

通貨レートを抽出するコマンドは

sed -e 's/.*"rates":{\([^}]*\).*/\1\n/' -e 's/,/\n/g' -e 's/:/,/g' -e 's/"//g' response

になりました。
あとはこれらを一つのファイルに並べて記載し、そのファイルを実行します。

画像8

結果をファイルに出力すればCSVファイルが完成です。

画像9

記事は以上です。

この記事が気に入ったらサポートをしてみませんか?