【问题标题】:How to make a class with an inner class JSON serializable如何使具有内部类 JSON 的类可序列化
【发布时间】:2019-11-22 01:58:49
【问题描述】:

我想自动将 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 可序列化对象?

【问题讨论】:

    标签: python json serialization inner-classes


    【解决方案1】:

    虽然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__)。

    【讨论】:

      猜你喜欢
      • 2011-04-15
      • 2014-10-24
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      • 2013-03-06
      • 2011-09-03
      相关资源
      最近更新 更多