如何使带有内部 class JSON 的 class 可序列化

How to make a class with an inner class JSON serializable

我想自动将 Python class 转换为字典,以便我可以将其转换为 JSON。问题 How to make a class JSON serializable 建议使用 myClass.__dict__,但是,使用它不会将任何内部 class 转换为 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 序列化。如何将 class AND INNER 类 转换为 JSON 可序列化对象?

虽然 myClass.__dict__ 不适用于内部 classes,但您可以定义自己的方法将 class 转换为字典,只要您知道哪些字段是对象。

下面的例子...

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。

如果您不知道 class 中的哪些字段是 JSON 可序列化的,哪些是内部 class 字段,您可以迭代 class 中的值的字典,check if they are JSON serializable,并根据需要将它们转换为字典 (value.__dict__)。