我想自动将 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 可序列化对象?
虽然
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__
)根据需要。