Skip to content

序列化

1. json

python
import json
json.dumps(dict | list, indent=2) # 编码
json.loads(str) # 解码

重写 json 类实现 datetime 的输出

py
class DateEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime.datetime):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        else:
            return json.JSONEncoder.default(self, obj)

json.dumps(xxx, cls=DateEncoder)

2. tomllib

只能读。

py
import tomllib
data = tomllib.loads('a = "A"\nb = 2')

3. pyyaml

sh
pip install pyyaml
python
import yaml
yaml.dump(dict | list).encode('utf-8').decode('unicode_escape')  # 编码
yaml.load(str, Loader=yaml.SafeLoader)  # 解码

4. dataclass 和 dict 的转换

dict -> dataclass 需要 dacite 库:

sh
pip install dacite
py
from dataclasses import dataclass, asdict
import json
from dacite import from_dict

@dataclass
class Person:
    @dataclass
    class Address:
        city: str
    name: str
    address: Address

p = Person("Bob", Person.Address("NYC"))
d = asdict(p)
p2 = from_dict(data_class=Person, data=d)