我已经设置了一些我自己的类,这些类是从字典中继承的,以像它们一样工作。然而,当我想将它们编码为 JSON(使用 Python)时,我希望它们以一种可以将它们解码回原始对象而不是字典的方式进行序列化。
所以我想支持我自己的类的嵌套对象(从 dict 继承)。
我尝试过类似的东西:
class ShadingInfoEncoder(json.JSONEncoder):
def encode(self, o):
if type(o).__name__ == "NodeInfo":
return '{"_NodeInfo": ' + super(ShadingInfoEncoder, self).encode(o) + '}'
elif type(o).__name__ == "ShapeInfo":
return '{"_ShapeInfo": ' + super(ShadingInfoEncoder, self).encode(o) + '}'
elif type(o).__name__ == "ShaderInfo":
return '{"_ShaderInfo": ' + super(ShadingInfoEncoder, self).encode(o) + '}'
return super(ShadingInfoEncoder, self).encode(o)
和:
class ShadingInfoEncoder(json.JSONEncoder):
def encode(self, o):
if isinstance(o, NodeInfo):
return '{"_NodeInfo": ' + super(ShadingInfoEncoder, self).encode(o) + '}'
elif isinstance(o, ShapeInfo):
return '{"_ShapeInfo": ' + super(ShadingInfoEncoder, self).encode(o) + '}'
elif isinstance(o, ShaderInfo):
return '{"_ShaderInfo": ' + super(ShadingInfoEncoder, self).encode(o) + '}'
return super(ShadingInfoEncoder, self).encode(o)
它通常可以工作,但是当它们嵌套或被转储的第一个对象不是这些类型时则不行。因此,这仅在输入对象属于该类型时才有效。然而,当它嵌套时不是。
我不确定如何递归地编码这个 JSON,所以所有嵌套/包含的实例都根据相同的规则进行编码。
我认为使用 JSONEncoder 的默认方法会更容易(因为只要对象的类型不受支持,就会调用该方法。)然而,由于我的对象是从 dict 继承的,它们被解析为字典而不是由“默认”处理方法。