今回はpythonでjsonの作成・読み込みの基本をみていきたいと思います。
現在のAPIでは基本jsonでデータをやりとりすることが基本となっています。古いAPIではxmlを使うこともありますが、pythonにおいては、作成も読み込みも両面においてjsonの方が簡易です。また、jsonの方がxmlよりもデータが軽量なので、今後新規で出てくるAPIは基本jsonになってくるものと思われます(行政系は除き。。)
そのため、xmlの解説は一旦せずに、jsonだけ覚えていきましょう。
JSONとは?
そもそもjsonとは何でしょうか?
JSONはJavascript Object Notationの略で、テキスト型のデータフォーマットの一つです。
名前にjavascriptと入っている通り、もともとjavascriptのオブジェクト表記構文のサブセットです。xmlより構造が簡易で人間が読みやすくなっています。(人間が読みやすいとは、感覚的にはエレメントとかがつらつら連なっていないイメージです)
pythonでJSONを取り扱う
JSONをインポートする
さて、pythonでjsonを取り扱う際はpythonの標準ライブラリにあるjsonモジュールを利用します。なので、一番最初に以下のようにimportしてください。
import json
JSONライブラリの概要
jsonはデータフォーマットなので、読み込む場合・書き込む場合の2パターンがあります。そして、それをオブジェクトとして実行するか、fileとして取り扱うかによって利用するメソッドが2つにさらに分かれます。
簡単にまとめると以下の表のようになりますが、書き込む場合はdump系を、読み込む場合はload系を利用します。オブジェクトを取り扱う場合は、dump”s”/ load”s”を利用し、ファイルを取り扱う場合は、load/dumpを利用します。
読み込み | 書き込み・作成 | |
json.obj | loads | dumps |
json.file | load | dump |
オブジェクトを利用するケースは、主にAPIで叩いたデータをそのまま読み込むようなケースが多く想定されます。
他方で、fileに保存読み込みをするケースはjson形式で取得したAPIの認証認可に必要なcredentialとかを読み込んだりする場合に利用するケースが想定されます。
実際にJSONモジュールを使ってみる
まずは自分でjsonの元となるようなデータを以下のように作ってみましょう。
import json json_data = { "id":1, "name":"mike", "rank":"a", "other_info":{ "age":27, "sex":"male" } }
JSONオブジェクトを作成する
まずは、簡単にjsonオブジェクトを作成していきましょう。オブジェクトを作成するので、dumpsを利用していきます。
#jsonを作成するときはdumps j = json.dumps(json_data) print(j)
実行すると以下のように表示されてきます。

jsonデータ化されているのが確認できますね。では、実際にその後のプロセスを行ってみましょう。
JSONオブジェクトを読み込む(APIのレスポンスを読み込む場合)
それでは、jsonオブジェクトの読み込みをしていきましょう。今回はobj自体を読み込むためloadsを利用します。
以下のようにjsonオブジェクトを読み込んで行くと、ネストかされたデータも取得可能です。
#ファイルからではなく、直接jsonを読み込む場合はloads print("json.loadsの結果↓") j_loads = json.loads(j) #jがjson objでloadsをすればOK print(j_loads) print("j_loads['id']:", j_loads["id"]) print("j_loads['id']:", j_loads["other_info"]["age"])
実行すると以下のように表示されてきます。

JSONファイルを作成する
では、次はjsonファイルを作成していきます。file形式でXXX.jsonというファイルを作成するので、ここではopen関数でファイルを書き込み形式で作成して、dumpメソッドを利用しています。
#json.fileを作るときはdump, arg1:json化させたいデータ, arg2:対象ファイル with open("sample.json", "w") as f: json.dump(json_data, f)
openメソッドはwithを併用して使ってくださいね、メモリを無駄に消費しないようにw
dumpメソッドに1:json化させたいデータ, 2:file path(fp)を引数として渡します。このケースでは、openで開いているf (as fのf)をfile pathとして使用します。
実行すると、sample.jsonファイルができて、当該ファイル内に以下のようなデータが格納されます。
{"id": 1, "name": "mike", "rank": "a", "other_info": {"age": 27, "sex": "male"}}
JSONファイルから読み込む(credentialを使うケース)
jsonファイルから読み込むケースでは、対象ファイルをopen関数で読み込み形式で開いて、loadメソッドで読み込んでいきます。
#json.fileを読み込むときはload with open("sample.json", "r") as f: j_load=json.load(f) print(j_load) print(j_load["id"]) print(j_load["other_info"]["age"])
loadで読み込んだ結果は、上で説明したloadsで読み込んだものと同様の結果になります。
まとめ
pythonで基本的なjsonの取り扱いかたをみてきました。
jsonjは幅広く利用されていますし、pythonで最初にみなさんが思い浮かべるようなスクレイピングのような機能を実装しようした場合に避けては通れないものです。
是非基本的な部分ではありますのでしっかり理解していければと思います。