Python 3でクラスをJSONシリアライズ可能にする方法

PYTHON3 チュートリアル

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

購読
通知
0 Comments
Inline Feedbacks
View all comments