【Python】jsonモジュールについて【標準ライブラリ】
- jsonモジュールとは
- PythonオブジェクトをJSONに変換(エンコード)
- JSONをPythonオブジェクトに変換(デコード)
- JSONファイルの読み書き
- カスタマイズ(カスタムエンコーダとデコーダ)
- JSONフォーマットのオプション
- jsonモジュールを使う際の注意点
jsonモジュールとは
json
モジュールは、Pythonの標準ライブラリに含まれており、JSON(JavaScript Object Notation)データを扱うための機能を提供します。
JSONは、軽量で構造化されたデータを扱うフォーマットであり、Web APIやデータ交換に広く利用されています。
Pythonでは、辞書(dict
)、リスト(list
)、タプル(tuple
)、文字列(str
)、数値(int
, float
)、ブール値(bool
)、None
などのオブジェクトをJSONに変換できます。
PythonオブジェクトをJSONに変換(エンコード)
json.dumps()
を使用すると、PythonのオブジェクトをJSON形式の文字列に変換できます。
import json
data = {"name": "Alice", "age": 25, "city": "Tokyo"}
json_str = json.dumps(data)
print(json_str)
出力:
{"name": "Alice", "age": 25, "city": "Tokyo"}
変換後のデータは文字列なので、そのまま保存したり、APIのリクエストボディとして使用できます。
JSONをPythonオブジェクトに変換(デコード)
json.loads()
を使用すると、JSON形式の文字列をPythonのオブジェクトに変換できます。
json_str = '{"name": "Alice", "age": 25, "city": "Tokyo"}'
data = json.loads(json_str)
print(data["name"]) # Alice
JSONからPythonの辞書に変換されるため、辞書のキーを使って値を取得できます。
JSONファイルの読み書き
JSONファイルを扱う場合、json.dump()
と json.load()
を使用します。
JSONを書き込む
with open("data.json", "w") as f:
json.dump(data, f)
JSONを読み込む
with open("data.json", "r") as f:
data = json.load(f)
print(data)
カスタマイズ(カスタムエンコーダとデコーダ)
Pythonのオブジェクトの中には、JSONに直接変換できないものもあります(例:datetime
)。
カスタムエンコーダ
import json
from datetime import datetime
class DateTimeEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.isoformat()
return super().default(obj)
data = {"time": datetime.now()}
json_str = json.dumps(data, cls=DateTimeEncoder)
print(json_str)
カスタムデコーダ
def datetime_decoder(dct):
if "time" in dct:
dct["time"] = datetime.fromisoformat(dct["time"])
return dct
data = json.loads(json_str, object_hook=datetime_decoder)
print(data)
JSONフォーマットのオプション
読みやすく整形するには、indent
オプションを使用します。
json_str = json.dumps(data, indent=4)
print(json_str)
jsonモジュールを使う際の注意点
- PythonのタプルはJSONではリストに変換される
- JSONではコメントを使用できない
- キーは必ず文字列でなければならない
None
はnull
に変換される