daisukeの技術ブログ

AI、機械学習、最適化、Pythonなどについて、技術調査、技術書の理解した内容、ソフトウェア/ツール作成について書いていきます

JSONファイルを扱う方法まとめ

今回は、JSON ファイルを扱う方法を書きます。

巨大な JSON ファイルを扱うのは、なかなか大変です。

そこで、効率よく扱うための方法を調べたので、実際にやっていきます。

JSONファイルの準備

サンプルとして使う JSON ファイルを準備します。

e-Statのユーザ登録

政府が公開してるデータを使います。データのダウンロードには、ユーザ登録が必要です。メールアドレスがあれば登録できます。

以下のページにアクセスします。

www.e-stat.go.jp

右上にある新規登録をクリックします。

e-Statのトップ
e-Statのトップ

ユーザID(E-mailアドレス)を入力して仮登録ボタンをクリックします。

ユーザ登録画面
ユーザ登録画面

すると、メールで、本登録用の URL が送られてきます。そこにアクセスして、ログインパスワードを決めると本登録が完了します。

e-StatのアプリケーションIDを取得する

ダウンロードする前に、対象のデータについて、アプリケーション ID を取得する必要があります。おそらく、サーバの負荷を考慮して、制限を行っているのだと思います。

ログインしてマイページにアクセスします。

マイページをクリックします
マイページをクリックします

続いて、「API機能(アプリケーションID発行)」をクリックします。

API機能(アプリケーションID発行)をクリックします
API機能(アプリケーションID発行)をクリックします

あまり分かっていませんが、アクセス元を特定するための情報だと思います。

名称は任意で、URL は、個人利用の場合は、「http://test.localhost/」を入力すればいいみたいなので、そのまま入力します。入力できたら「発行」をクリックします。

情報を入力して発行をクリックします
情報を入力して発行をクリックします

すると、アプリケーション ID が発行されたので、これをコピーしておきます。

アプリケーションIDが発行された
アプリケーションIDが発行された

e-Statのデータをダウンロードする

では、データをダウンロードしてみます。

何でもいいのですが、ここでは、「令和2年国勢調査」の男女別人口のデータをダウンロードしてみます。

一応、URL を貼っておきます。

https://www.e-stat.go.jp/stat-search/database?page=1&layout=datalist&toukei=00200521&bunya_l=02&tstat=000001136464&cycle=0&tclass1=000001136466&tclass2val=0

ダウロードしたいデータの「API」をクリックします。

APIをクリックします
APIをクリックします

すると、API リクエスト URL が表示されるので、JSON形式を選んで、「URLをコピー」をクリックします。

JSON形式を選んでURLをコピーをクリックします
JSON形式を選んでURLをコピーをクリックします

API リクエスト URL に、先ほど取得したアプリケーション ID を挿入します。具体的には、以下の XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX を、アプリケーション ID に差し替えます。

http://api.e-stat.go.jp/rest/3.0/app/json/getStatsData?appId=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&lang=J&statsDataId=0003445078&metaGetFlg=Y&cntGetFlg=N&explanationGetFlg=Y&annotationGetFlg=Y§ionHeaderFlg=1&replaceSpChars=0

この URL をブラウザのアドレスバーにコピペすると、JSON 形式の内容が表示されるので、右クリックして「名前を付けて保存」で、ダウンロードできます。

Git BASH などのコンソールで、curl コマンドを使ってダウンロードする方法は以下です。

$ curl -o getStatsData.json "http://api.e-stat.go.jp/rest/3.0/app/json/getStatsData?appId=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&lang=J&statsDataId=0003445078&metaGetFlg=Y&cntGetFlg=N&explanationGetFlg=Y&annotationGetFlg=Y§ionHeaderFlg=1&replaceSpChars=0"

これで JSON ファイルの準備が出来ました。

ちなみに、ダウロードした JSON ファイルは、1,592,704 バイトです。

ダウンロードしたJSONファイル
ダウンロードしたJSONファイル

JSONファイルの整形(VSCode)

JSON ファイルをエディタで開くと分かりますが、改行がありません。

このままでは何かと扱いにくいので、JSON ファイルを整形します。

VSCode で JSON ファイルを開き、右クリックして「ドキュメントのフォーマット」をクリックします。

VSCodeでJSONファイルを開く
VSCodeでJSONファイルを開く

整形されて見やすくなりました。122,712行あります。

JSONファイルが整形された
JSONファイルが整形された

GUIツール

先に結論を書いておくと、企業でも使えるフリーな JSON ファイルビューアは見つかりませんでした。

J_and_E は、1MB以上の JSON ファイルでは不安定でした。

Dadroit JSON Viewer は性能は素晴らしいですが、商用利用不可です。

Excel のデータベース機能で取り込む方法もありますが、決まった形式(構造を理解している形式)を扱うには悪くなかったですが、柔軟にデータを見たいという用途には合わないと思いました。

JSONファイルビューア「J_and_E」

検索してみると、JSON ファイルビューアがいくつかヒットします。

Chrome の拡張機能で実装されてるものや、Microsoft Store(有料)からダウンロードできるものがありました。これらは、会社で使用することを想定すると、情報流出や、ライセンスの問題から、手が出しにくいです。

そこで、普通の国産のフリーソフトの以下が見つかりました。

forest.watch.impress.co.jp

解凍するだけで使えて(起動したときに .NET のインストールが必要だったかも)、ライセンス的にも商用利用も問題ありませんでした。

機能としては、自動で JSON ファイルの整形を行ってくれる機能はありますが、特別便利な機能はありませんでした。でも、普通に使いやすいですし、対象の JSON ファイルの概要を把握するには十分に使えると感じました。

あと、2016年に開発は止まってるようで、今後の改善は見込めないと思います。

[J&EでgetStatsData.jsonを開いたところ]
J&EでgetStatsData.jsonを開いたところ

ただ、ちょっと大きい JSON ファイル(26MB)では、ハングしてしまって、動きませんでした。1MB ぐらいまでの小さい JSON ファイルなら、十分使えるソフトだと思います。

Dadroit JSON Viewer

J & E と似たような外観の Dadroit JSON Viewer を見つけました。

dadroit.com

残念ながら商用利用不可ですが、年間 98ドル払えば、企業でも使用できます。

こちらも少し使ってみました。大容量の JSON ファイルを扱えることや、高速性をアピールしているだけあって、J & E に比べると、大きい JSON ファイル(26MB)でも全く問題なく扱えますし、安定感があります。

Dadroit JSON Viewerの外観
Dadroit JSON Viewerの外観

個人利用なら、50MB までの JSON ファイルが扱えるようです。年間 98ドル払うと、2GBまでのファイルが扱えるようです。

Dadroit JSON Viewerのライセンス料
Dadroit JSON Viewerのライセンス料

全て展開したり、全て折りたたんだり、次のレベルを全て展開する、など、とても便利です。

CSV、XML に変換する機能もありますし、正規表現での検索もあります。

個人で使うなら、このソフトがいいと思います。

CUIツール

jq

jq という、Linux で有名な JSON ファイルを扱うツールがあります。

長くなってきたので、jq の紹介は次回にします。

おわりに

今回は、JSON ファイルを扱う方法として、e-Stat からの JSON ファイルのダウンロード方法と、JSON ファイルビューアを紹介しました。

次回は、JSON ファイルを CUI で扱うツール「jq」を紹介します。

最後になりましたが、エンジニアグループのランキングに参加中です。

気楽にポチッとよろしくお願いいたします🙇

今回は以上です!

最後までお読みいただき、ありがとうございました。