Pythonでjsonモジュールを用いてJSONの読み込み/書き込みを行う方法について解説します。
Contents
PythonでJSONデータの利用
PythonでJSON形式のデータを読み込み/書き込みをする場合には、jsonモジュールを使用します。
JSONとは「JavaScript Object Notation」の略で、JavaScriptのオブジェクトの書き方を元にしたデータ定義方法になっています。JavaScriptで使われることを想定して定義されたものですが、Pythonを含めた幅広い言語で使用でき、WebのREST APIにおけるデータのやり取りのためのデータ構造としても使用されています。
本記事では、jsonモジュールを使ってJSONを扱う方法について紹介します。
jsonモジュールの公式ドキュメントはこちらを参照してください。
JSON形式ファイルの読み込み/書き込み方法 dump, load
jsonモジュールを使用してJSON形式ファイルの読み込み/書き込みを行う場合には、dump関数及びload関数を使用します。dump関数とload関数は以下のように使用します。
import json # データを用意 data = { "data": [ {"id": 1, "name": "Taro"}, {"id": 2, "name": "Haruka"}, {"id": 3, "name": "Sakura"}, ] } # JSONファイルへの書き込み with open("test.json", "w", encoding='utf-8') as f: json.dump(data, f) # JSONファイルの読み込み with open("test.json", "r", encoding='utf-8') as f: data_r = json.load(f) print(data_r) print(type(data_r))
【test.jsonのファイルの中身】 {"data": [{"id": 1, "name": "Taro"}, {"id": 2, "name": "Haruka"}, {"id": 3, "name": "Sakura"}]}
【実行結果】 {'data': [{'id': 1, 'name': 'Taro'}, {'id': 2, 'name': 'Haruka'}, {'id': 3, 'name': 'Sakura'}]} <class 'dict'>
以降でポイントを説明します。
JSON ファイルの書き込み dump
JSONファイルへの書き込みを行っている部分は以下の部分です。
# JSONファイルへの書き込み with open("test.json", "w", encoding='utf-8') as f: json.dump(data, f)
JSONファイルへ書き込みを行う場合には、open関数で.json拡張子のファイルをopenします。入力する辞書データ(data)とファイルオブジェクト(f)をdump関数の引数に渡すことでJSON形式でファイルを出力することができます。
【test.jsonのファイルの中身】 {"data": [{"id": 1, "name": "Taro"}, {"id": 2, "name": "Haruka"}, {"id": 3, "name": "Sakura"}]}
test.jsonの中身を見てみると、用意した辞書データと同じです。ただし、jsonではダブルクォーテーション(“)で文字列を囲むことになっているので、シングルクォーテーション(‘)の文字列で辞書を作成していた場合はダブルクォーテーションに変換されます。
JSONファイルの読み込み load
JSONの読み込みを行っているのは以下の部分です。
# JSONファイルの読み込み with open('test.json', 'r') as f: data_r = json.load(f) print(data_r) print(type(data_r))
JSONファイルへ読み込みを行う場合には、open関数でJSONファイルをopenします。データを読み込む際にはload関数を使用します。上記の例ではdata_rに読み込んで出力しています。
【実行結果】 {'data': [{'id': 1, 'name': 'Taro'}, {'id': 2, 'name': 'Haruka'}, {'id': 3, 'name': 'Sakura'}]} <class 'dict'>
実行結果を見てみるとPythonの辞書形式で読み込みがされていることがわかるかと思います。
Python辞書とJSON形式文字列間での変換 dumps, loads
上記では、JSON形式のファイルの読み込み/書き込みについて見てきました。プログラム内でPython辞書とJSON形式の文字列を変換する例を見ていきます。Python辞書とJSON形式文字列を変換する際には、dumps関数とloads関数を使用します。
ファイルの読み込み/書き込み時との違いは「s」があるかないかの違いですので注意しましょう。
import json # データを用意 data = { "data": [ {"id": 1, "name": "Taro"}, {"id": 2, "name": "Haruka"}, {"id": 3, "name": "Sakura"}, ] } # JSON形式文字列への変換 json_data = json.dumps(data) print(json_data) print(type(json_data), "\n") # JSON形式文字列を辞書へ変換 data_dic = json.loads(json_data) print(data_dic) print(type(data_dic))
【実行結果】 {"data": [{"id": 1, "name": "Taro"}, {"id": 2, "name": "Haruka"}, {"id": 3, "name": "Sakura"}]} <class 'str'> {'data': [{'id': 1, 'name': 'Taro'}, {'id': 2, 'name': 'Haruka'}, {'id': 3, 'name': 'Sakura'}]} <class 'dict'>
以降でポイントを説明します。
Python辞書→JSON形式文字列への変換 dumps
Pythonの辞書をJSON形式文字列に変換しているのは以下の部分です。
# JSON形式文字列への変換 json_data = json.dumps(data) print(json_data) print(type(json_data))
JSON形式文字列へ変換する際には、辞書をdumps関数の引数に渡します。typeで型を確認していますが、strとなっていることが分かるかと思います。
【実行結果抜粋】 {"data": [{"id": 1, "name": "Taro"}, {"id": 2, "name": "Haruka"}, {"id": 3, "name": "Sakura"}]} <class 'str'>
JSON形式文字列→Python辞書への変換 loads
JSON形式文字列をPythonの辞書に変換しているのは以下の部分です。
# JSON形式文字列を辞書へ変換 data_dic = json.loads(json_data) print(data_dic) print(type(data_dic))
JSON形式文字列をPythonの辞書に変換する際には、loads関数にJSON形式の文字列を渡します。typeで型を確認していますが、dictになっていることが分かるかと思います。
【実行結果抜粋】 {'data': [{'id': 1, 'name': 'Taro'}, {'id': 2, 'name': 'Haruka'}, {'id': 3, 'name': 'Sakura'}]} <class 'dict'>
上記で紹介しているソースコードについてはgithubにて公開しています。参考にしていただければと思います。