WEBのシステム開発はPHPを使用していますが、データ解析等のため Python3 の研究を始めました。Python3 は日本語の情報がとても少ないので、エンジニアや学生の皆さんに役立ちそうなことをブログ記事として共有できればと思います。
この記事では Python3 で JSON の読み書きをする方法についてまとめました。JSON は WebAPI のレスポンスとして使用されることが多いため、リモートの JSON をパースする方法についてもサンプルーコード付きで紹介します。
目次
JSON の読み書き事始め
Python3 で JSON を扱うに当たってパッケージ・ライブラリのインストールは不要です。標準モジュール json で扱うことができます。
json モジュール公式ドキュメント
json — JSON エンコーダおよびデコーダ
JSON のファイル書き出し・文字列出力
json モジュールを使うことで Python オブジェクトを簡単にファイル書き出し、文字列に変換することができます。ファイルとして書き込みたいなら json.dump() を、文字列に変換したいなら json.dumps() を使うだけです。サンプルコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# json モジュールのインポート import json # JSON の書き出し用のサンプルオブジェクト data = { 'title': 'JSONの読み書き', 'author': 'Crane & to. 株式会社', 'items': [ { 'title': 'Hellow JSON', 'description': 'まずJSONについてを学びましょう' }, { 'title': 'PythonでJSON', 'description': 'PythonでJSONを読み書きする方法を学びましょう' } ] } # Pythonオブジェクトをファイル書き込み savepath = 'sample.json' with open(savepath, 'w') as outfile: json.dump(data, outfile) # Pythonオブジェクトを文字列に変換 json_str = json.dumps(data) print(json_str) |
JSON の読み込み(ローカルファイル)
JSON ファイルの読み込みには json.load() を、JSON 文字列の読み込みには json.loads() を使うことで、Python オブジェクトとして扱うことができます。
json.load() を使って上の書き込みの項目で生成したファイルを読み込むサンプルコードを見てみましょう。( json.loads() については WebAPI のサンプルで紹介します。)
1 2 3 4 5 6 7 8 9 |
import json try: # ローカルJSONファイルの読み込み with open('sample.json', 'r') as f: data = json.load(f) print(data) except json.JSONDecodeError as e: print('JSONDecodeError: ', e) |
念のためjson.JSONDecodeError で例外処理をしています。
JSON の読み込み – WebAPI(リモートファイル)
JSON はローカルファイル以外に WebAPI のレスポンスとして、リモートのサーバから読み込むことが多いかと思います。弊社サーバに設置した JSON ファイルを例にリモートの JSON ファイルを読み込むサンプルをご紹介します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import json import urllib.request try: url = 'https://www.craneto.co.jp/study_sample/simple_json_file.json' res = urllib.request.urlopen(url) # json_loads() でPythonオブジェクトに変換 data = json.loads(res.read().decode('utf-8')) print(data['title']) print(data['author']) print(data['description']) for item in data['pages']: print(item['title'], ':', item['url']) except urllib.error.HTTPError as e: print('HTTPError: ', e) except json.JSONDecodeError as e: print('JSONDecodeError: ', e) |
ポイント解説
urllib.request
open 関数ではリモートファイルを開くことはできません。URL をもとにリモートファイルを開くには標準モジュール urllib.request を使用します。サンプルコードでは res.read().decode(‘utf-8’) で URL の出力内容を全取得、さらに UTF-8 にデコードしてます。よくある使い方なので urllib.request を初めてみるという方は下記の公式ドキュメントをチェックしましょう。
urllib.request 公式ドキュメント
urllib.request — URL を開くための拡張可能なライブラリ
json_loads()
取得した JSON 文字列をjson_loads() の引数として渡すことで、Python オブジェクトとして柔軟に扱うことができます。
以上、Python3 で JSON の読み書きする方法をまとめてみました。弊社の専門はPHP言語なので、おかしなところがあればご指摘ください。
※この記事の内容は適宜更新することがあります。