Pythonで自分で定義したクラスのオブジェクトをJSON形式に変換する方法と、その逆の変換方法について説明します。この記事は、Pythonのjson
モジュールとクラスの基本的な知識があることを前提としています。
クラスオブジェクトをJSONに変換する
Pythonのjson
モジュールのdump
やdumps
メソッドを使用して、クラスのインスタンスを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
モジュールのload
やloads
メソッドを使用します。こちらも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の相互変換を行う基本的な方法です。より複雑なクラスや、ネストしたオブジェクトの変換については、各クラスの特性に合わせてエンコーダとデコーダをカスタマイズする必要があります。.