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

问题描述 投票:0回答:1

我想自动将 Python 类转换为字典,以便我可以将其转换为 JSON。问题 如何使类 JSON 可序列化建议使用

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 可序列化对象?

python json serialization inner-classes
1个回答
2
投票

虽然

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

以下示例...

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

    def to_dict(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"


my_thing = Thing("Clay")
print(my_thing.__dict__)
print(my_thing.to_dict())

产生结果...

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

可以使用

json.dumps()
将其转换为 JSON。

如果您不知道类中的哪些字段是 JSON 可序列化的以及哪些是内部类,您可以迭代类字典中的值,检查它们是否可 JSON 序列化,并将它们转换为字典 (

value.__dict__
)根据需要。

© www.soinside.com 2019 - 2024. All rights reserved.