Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Introduction

pyserdedataclassesベースのシンプルで強力なシリアライゼーションライブラリで、クラスをJSONやYAML等の様々なデータフォーマットに簡単に効率的に変換可能になります。

pyserdeはdataclass中心のワークフローを想定し、クラス読み込み時にシリアライザを生成することで実行時オーバーヘッドを抑えます。

主な特徴:

  • 複数フォーマット対応(dicttuple、JSON、YAML、TOML、MsgPack、Pickle)
  • リッチな型サポート(Optional、Union、Literal、enum、datetime、numpy など)
  • ランタイム型チェックと拡張フック

クラスに@serdeデコレータを付け、PEP484形式でフィールドに型アノテーションを付けます。

from serde import serde

@serde
class Foo:
    i: int
    s: str
    f: float
    b: bool

すると、Fooクラスは以下のようにJSONにシリアライズ出来るようになります。

>>> from serde.json import to_json
>>> to_json(Foo(i=10, s='foo', f=100.0, b=True))
'{"i":10,"s":"foo","f":100.0,"b":true}'

また、JSONからFooクラスにデシリアライズも出来るようになります。

>>> from serde.json import from_json
>>> from_json(Foo, '{"i": 10, "s": "foo", "f": 100.0, "b": true}')
Foo(i=10, s='foo', f=100.0, b=True)

pyserdeはメモリ内フォーマットのdicttupleに加えて、追加パッケージを入れることでYAML、TOML、MsgPack、Pickleも扱えます。

>>> from serde import to_dict, from_dict
>>> to_dict(Foo(i=10, s='foo', f=100.0, b=True))
{"i": 10, "s": "foo", "f": 100.0, "b": True}
>>> from_dict(Foo, {"i": 10, "s": "foo", "f": 100.0, "b": True})
Foo(i=10, s='foo', f=100.0, b=True)

Next Steps