\

Pythonで自分で定義したクラスのオブジェクトをJSON形式に変換する方法と、その逆の変換方法について説明します。この記事は、Pythonのjsonモジュールとクラスの基本的な知識があることを前提としています。

クラスオブジェクトをJSONに変換する

Pythonのjsonモジュールのdumpdumpsメソッドを使用して、クラスのインスタンスをJSON化することができます。ただし、そのままではTypeErrorが発生するため、エンコーダのdefaultメソッドを書き換えて、インスタンスの__dict__を返すようにします。

import json

class MyClass:
    def __init__(self, i=0):
        self.i = i

class MyEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, MyClass):
            return o.__dict__
        return json.JSONEncoder.default(self, o)

a = MyClass(100)
js = json.dumps(a, cls=MyEncoder)
print(js)  # 出力: {"i": 100}

JSONをクラスオブジェクトに変換する

逆に、JSONをクラスオブジェクトに変換するには、jsonモジュールのloadloadsメソッドを使用します。こちらもobject_hookメソッドを書き換えて、適切なクラスのオブジェクトを作成します。

class MyDecoder(json.JSONDecoder):
    def __init__(self, *args, **kwargs):
        json.JSONDecoder.__init__(self, object_hook=self.object_hook, *args, **kwargs)

    def object_hook(self, o):
        if 'i' in o:
            return MyClass(o['i'])
        return o

b = json.loads(js, cls=MyDecoder)
print(b.i)  # 出力: 100

以上がPythonでクラスオブジェクトとJSONの相互変換を行う基本的な方法です。より複雑なクラスや、ネストしたオブジェクトの変換については、各クラスの特性に合わせてエンコーダとデコーダをカスタマイズする必要があります。.

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です