我的类(class)类别如下:
class Base:
def __init__(self):
self.var1 = “variable”
class Child:
def __init__(self):
self.base = Base()
self.var2 = False
class RootChild:
def __init__(self):
self.child = Child()
self.var3 = “variable”
self.base = Base()
我想保存“RootChild”的一个实例,其所有字段都以 json 表示。关于此任务有很多主题,但我无法理解它们的差异和用例。这个问题的大多数 Python 解决方案是什么?
最佳答案
你的里程会有所不同 - 从使用“序列化器”策略:一层机制知道如何从你的类映射到 Json 并返回, 这可能需要大量工作(需要手动描述应该序列化/反序列化的每个字段) - https://docs.pylonsproject.org/projects/colander/en/latest/
或者你可以构建一个自定义的 JSON 编码器,它只检查它是否是一个已知的类,然后返回一个包含其所有字段的字典(可以通过内省(introspection)自动提取)-(检查示例以扩展编码器: https://docs.python.org/3/library/json.html)
无论如何,都会有很多权衡和不同级别的工作 - 如果您打算在具有相同类的Python应用程序中读回JSON,您可以使用“jsonpickle” - 它将向您的JSON添加额外的元数据,但将确保所有对象的往返完全按原样:https://jsonpickle.github.io/
不使用任何其他库,并且假设您只需要导出类,自定义编码器策略可能会有些简单:
import json
class SimpleObject(json.JSONEncoder):
def default(self, obj):
if hasattr(obj, "__dict__"):
return {key:value for key, value in obj.__dict__.items() if not key.startswith("_")}
return super().default(obj)
a = RootChild()
在交互环境上:
In [52]: a = RootChild()
In [53]: print(json.dumps(a, cls=SimpleObject, indent=4))
{
"child": {
"base": {
"var1": "variable"
},
"var2": false
},
"var3": "variable",
"base": {
"var1": "variable"
}
}
关于json - 如何将嵌套类转换为 json 或 dict?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71266731/