Python中嵌套NamedTuples的JSON反序列化

Jav*_*Jav 5 python serialization namedtuple

嵌套 NamedTuples 的 JSON 序列化非常简单:

\n
import json\nfrom typing import NamedTuple\n\nclass A(NamedTuple):\n    a: int\nclass B(NamedTuple):\n    a: A\n    b: str\ns = json.dumps(B(A(42), "auie"))\nprint(s) # outputs the following string: "[[42], 'auie']"\n
Run Code Online (Sandbox Code Playgroud)\n

另一方面,JSON 反序列化需要一些工作\xe2\x80\xa6 最好的方法是什么?我想过使用递归函数,但我希望有一个更干净的实现\xe2\x80\xa6

\n
def deserialize(T,l):\n    for i, k in enumerate(T._field_types):\n        if hasattr(T._field_types[k], "_field_types"): # I'm open to a more robust check\n            l[i] = deserialize(T._field_types[k], l[i])\n    return T(*l)\n    \nprint(deserialize(B, json.loads(s))) # prints B(a=A(a=42), b='auie')\n
Run Code Online (Sandbox Code Playgroud)\n

mov*_*nuv 3

您可能想研究一下pydantic,它具有许多用于序列化和反序列化对象的功能。它还允许将对象设置为不可变,请参阅此处