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