如何使用内部类JSON serializab创建类

2024-04-24 13:44:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我想自动将一个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可序列化对象?你知道吗


Tags: 对象nameselfjson序列化initdefdict
1条回答
网友
1楼 · 发布于 2024-04-24 13:44:45

虽然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__)。你知道吗

相关问题 更多 >