【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 ファイルの読み込み/書き込み
dump、load
json モジュールで JSON 形式ファイルの読み込み/書き込みを行う場合は、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 拡張子のファイルを開きます。入力する辞書データ(data)とファイルオブジェクト(f)を dump 関数の引数に渡すことで JSON 形式でファイルを出力することができます。
【test.jsonのファイルの中身】
{"data": [{"id": 1, "name": "Taro"}, {"id": 2, "name": "Haruka"}, {"id": 3, "name": "Sakura"}]}test.json のファイルの中身を確認すると用意した辞書データと同じになっていることが分かります。
ただし、json ではダブルクォーテーション(")で文字列を囲むことが仕様となっています。そのため、Python 側でシングルクォーテーション(')の文字列で辞書を作成していたとしても(")で出力されます。
JSON ファイルの読み込み load
JSON の読み込みを行っているのは以下の部分です。
# JSONファイルの読み込み
with open("test.json", "r", encoding='utf-8') as f:
data_r = json.load(f)
print(data_r)
print(type(data_r))データを読み込む際には、load 関数を使用します。上記の例では data_r にデータを読み込んで出力しています。
【実行結果】
{'data': [{'id': 1, 'name': 'Taro'}, {'id': 2, 'name': 'Haruka'}, {'id': 3, 'name': 'Sakura'}]}
<class 'dict'>実行結果を見ると辞書形式で読み込みがされていることが分かります。
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'>まとめ
Python で json モジュールを用いて JSON の読み込み/書き込みを行う方法について解説しました。
JSON とは「JavaScript Object Notation」の略で、JavaScript のオブジェクトの書き方を元にしたデータ定義方法で、Web のREST API におけるデータのやり取りのためのデータ構造や設定ファイルの管理方法としても使用されます。
この記事では、dump、load、dumps、loads といった基本的な関数の使い方を例を使って紹介しています。
JSON は、プログラム開発でよく使用するデータ形式であるため、ぜひ json モジュールの使い方を覚えて、うまく使いこなしてもらえたらと思います。
上記で紹介しているソースコードについては GitHub にて公開しています。参考にしていただければと思います。

