Data Formats

pyserdeは、dicttupleJSONYAMLTOMLMsgPackPickle などのさまざまなデータ形式をシリアライズおよびデシリアライズできます。
各APIは追加のキーワード引数を取ることができ、これらの引数はpyserdeで使用されるベースパッケージへと渡されます。

例えば、YAMLでフィールドの順序を保持したい場合、serde.yaml.to_yamlsort_key=Trueを渡すことができます。

serde.yaml.to_yaml(foo, sort_key=True)

sort_key=Trueyaml.safedumpに渡されます。

dict

>>> from serde import to_dict, from_dict

>>> to_dict(Foo(i=10, s='foo', f=100.0, b=True))
from_dict(Foo, {"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)

詳細はserde.to_dict / serde.from_dictをご覧ください。

tuple

>>> from serde import to_tuple, from_tuple

>>> to_tuple(Foo(i=10, s='foo', f=100.0, b=True))
(10, 'foo', 100.0, True)

>>> from_tuple(Foo, (10, 'foo', 100.0, True))
Foo(i=10, s='foo', f=100.0, b=True)

詳細はserde.to_tuple / serde.from_tupleをご覧ください。

JSON

>>> from serde.json import to_json, from_json

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

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

詳細はserde.json.to_json / serde.json.from_jsonをご覧ください。

Yaml

>>> from serde.yaml import from_yaml, to_yaml

>>> to_yaml(Foo(i=10, s='foo', f=100.0, b=True))
b: true
f: 100.0
i: 10
s: foo

>>> from_yaml(Foo, 'b: true\nf: 100.0\ni: 10\ns: foo')
Foo(i=10, s='foo', f=100.0, b=True)

詳細はserde.yaml.to_yaml / serde.yaml.from_yamlをご覧ください。

Toml

>>> from serde.toml from_toml, to_toml

>>> to_toml(Foo(i=10, s='foo', f=100.0, b=True))
i = 10
s = "foo"
f = 100.0
b = true

>>> from_toml(Foo, 'i = 10\ns = "foo"\nf = 100.0\n

b = true')
Foo(i=10, s='foo', f=100.0, b=True)

詳細はserde.toml.to_toml / serde.toml.from_tomlをご覧ください。

MsgPack

>>> from serde.msgpack import from_msgpack, to_msgpack

>>> to_msgpack(Foo(i=10, s='foo', f=100.0, b=True))
b'\x84\xa1i\n\xa1s\xa3foo\xa1f\xcb@Y\x00\x00\x00\x00\x00\x00\xa1b\xc3'

>>> from_msgpack(Foo, b'\x84\xa1i\n\xa1s\xa3foo\xa1f\xcb@Y\x00\x00\x00\x00\x00\x00\xa1b\xc3')
Foo(i=10, s='foo', f=100.0, b=True)

詳細はserde.msgpack.to_msgpack / serde.msgpack.from_msgpackをご覧ください。

Pickle

v0.9.6で新しく追加されました

>>> from serde.pickle import from_pickle, to_pickle

>>> to_pickle(Foo(i=10, s='foo', f=100.0, b=True))
b"\x80\x04\x95'\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x01i\x94K\n\x8c\x01s\x94\x8c\x03foo\x94\x8c\x01f\x94G@Y\x00\x00\x00\x00\x00\x00\x8c\x01b\x94\x88u."

>>> from_pickle(Foo, b"\x80\x04\x95'\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x01i\x94K\n\x8c\x01s\x94\x8c\x03foo\x94\x8c\x01f\x94G@Y\x00\x00\x00\x00\x00\x00\x8c\x01b\x94\x88u.")
Foo(i=10, s='foo', f=100.0, b=True)

詳細はserde.pickle.to_pickle / serde.pickle.from_pickleをご覧ください。

新しいデータ形式のサポートが必要ですか?

pyserde をできるだけシンプルに保つため、XML のようなデータフォーマットをサポートする予定はありません。
新しいデータ形式のサポートが必要な場合は、別のPythonパッケージを作成することをお勧めします。
データ形式がdictやtupleに変換可能であれば、シリアライズ/デシリアライズAPIの実装はそれほど難しくありません。
実装方法を知りたい場合は、YAMLの実装をご覧ください。