クラスを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形式でシリアライズすることができます。使用する方法は、シナリオや必要に応じて選択してください。
