【Python】JSONの読み込み/書き込み方法 ~dump, load, dumps, loads~

Pythonでjsonモジュールを用いてJSONの読み込み/書き込みを行う方法について解説します。
目次
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にて公開しています。参考にしていただければと思います。

