如何使用可序列化内部类JSON的类

时间:2019-07-12 09:56:23

标签: python json serialization inner-classes

我想自动将Python类转换为字典,以便将其转换为JSON。问题How to make a class JSON serializable建议使用myClass.__dict__,但是,使用此方法不会将任何内部类转换为JSON可序列化对象。

以下示例...

class Thing():
    def __init__(self, name):
        self.name = name
        self.children = [self.Thing2(self)]

    class Thing2():
        def __init__(self, parent):
            self.name = parent.name + "'s child"

myThing = Thing("Clay")
print(myThing.__dict__)

产生结果...

{'name': 'Clay', 'children': [<__main__.Thing.Thing2 object at 0x00000257C4358B00>]}

仍无法JSON序列化。如何将类和内部类转换为JSON可序列化对象?

1 个答案:

答案 0 :(得分:0)

尽管myClass.__dict__在内部类上不起作用,但是只要知道哪些字段是对象,就可以定义自己的方法将类转换为字典。

以下示例...

class Thing():
    def __init__(self, name):
        self.name = name
        self.children = [self.Thing2(self)]

    def asDict(self):
        dict = self.__dict__
        dict["children"] = [child.__dict__ for child in dict["children"]]
        return dict


    class Thing2():
        def __init__(self, parent):
            self.name = parent.name + "'s child"


myThing = Thing("Clay")
print(myThing.__dict__)
print(myThing.asDict())

产生结果...

{'name': 'Clay', 'children': [<__main__.Thing.Thing2 object at 0x00000257C4358B00>]}
{'name': 'Clay', 'children': [{'name': "Clay's child"}]}

可以使用json.dumps()转换为JSON。

如果您不知道您的类中的哪些字段可序列化为JSON以及哪些是内部类,则可以遍历类的字典check if they are JSON serializable中的值,然后将它们转换为字典(value.__dict__ )。