クラスをJSONシリアライズする方法
PythonのクラスオブジェクトをJSONにシリアライズするには、いくつかの方法があります。ここでは、主に3つの異なる方法を紹介し、それぞれの方法に対してサンプルコードと出力例を示します。
方法1: カスタムエンコーダーを使用する
この方法では、jsonモジュールのデフォルトのエンコーダーを拡張して、クラスのインスタンスを適切に処理できるようにします。
import json class User: def __init__(self, name, age): self.name = name self.age = age class UserEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, User): return {'name': obj.name, 'age': obj.age} return json.JSONEncoder.default(self, obj) user = User('Alice', 30) json_string = json.dumps(user, cls=UserEncoder) print(json_string)
出力:
{"name": "Alice", "age": 30}
方法2: __dict__ メソッドを使用する
Pythonのオブジェクトが持つ __dict__ 属性を利用して、オブジェクトの属性を辞書として取得し、JSONに変換します。
import json class User: def __init__(self, name, age): self.name = name self.age = age user = User('Bob', 25) json_string = json.dumps(user.__dict__) print(json_string)
出力:
{"name": "Bob", "age": 25}
方法3: シリアライズ関数を定義する
オブジェクトをJSONに変換するためのカスタム関数を定義し、その関数をjson.dumps()のdefault引数として渡します。
import json class User: def __init__(self, name, age): self.name = name self.age = age def serialize_user(obj): if isinstance(obj, User): return {'name': obj.name, 'age': obj.age} raise TypeError('Object of type User is not JSON serializable') user = User('Carol', 28) json_string = json.dumps(user, default=serialize_user) print(json_string)
出力:
{"name": "Carol", "age": 28}
これらの方法を使用して、PythonのクラスインスタンスをJSON形式でシリアライズすることができます。使用する方法は、シナリオや必要に応じて選択してください。