dataclass-wizard是一个适合您的现代选项。它支持复杂的类型,例如日期和时间、typing
模块中的大多数泛型以及嵌套的数据类结构。
PEP 585和604中引入的“新样式”注释可以通过__future__
如下所示的导入移植回 Python 3.7 。
from __future__ import annotations # This can be removed in Python 3.10
from dataclasses import dataclass, field
from dataclass_wizard import JSONWizard
@dataclass
class MyClass(JSONWizard):
my_str: str | None
is_active_tuple: tuple[bool, ...]
list_of_int: list[int] = field(default_factory=list)
string = """
{
"my_str": 20,
"ListOfInt": ["1", "2", 3],
"isActiveTuple": ["true", false, 1]
}
"""
instance = MyClass.from_json(string)
print(repr(instance))
# MyClass(my_str='20', is_active_tuple=(True, False, True), list_of_int=[1, 2, 3])
print(instance.to_json())
# '{"myStr": "20", "isActiveTuple": [true, false, true], "listOfInt": [1, 2, 3]}'
# True
assert instance == MyClass.from_json(instance.to_json())
您可以使用以下命令安装 Dataclass Wizard pip
:
$ pip install dataclass-wizard
一点背景资料:
对于序列化,它使用稍微修改(更有效)的dataclasses.asdict
. 在将 JSON 反序列化为数据类实例时,它第一次迭代数据类字段并为每个带注释的类型生成一个解析器,这使得反序列化过程多次运行时效率更高。
免责声明:我是这个库的创建者(和维护者)。