enumとdataclassを含んだ値をserialize/deserializeするためにjsonpickleを使う
以前の記事の続き。
何も頑張って自作せずともjsonpickleを使えば良いかもしれない。
import dataclasses import enum import jsonpickle class Status(enum.Enum): x = enum.auto() y = enum.auto() z = enum.auto() @dataclasses.dataclass class A: name: str age: int status: Status a = A(name="foo", age=0, status=Status.y) print(jsonpickle.encode(a)) print(jsonpickle.decode(jsonpickle.encode(a))) print(jsonpickle.decode(jsonpickle.encode(a)) == a)
こんな感じ。
{"py/object": "__main__.A", "name": "foo", "age": 0, "status": {"py/reduce": [{"py/type": "__main__.Status"}, {"py/tuple": [2]}]}} A(name='foo', age=0, status=<Status.y: 2>) True
以下のようにするとindentも調整できるし、手で触れる程度にはなるのではないか?
from functools import partial import jsonpickle encode = partial(jsonpickle.encode, indent=2)