如何使带有内部 class JSON 的 class 可序列化
How to make a class with an inner class JSON serializable
我想自动将 Python class 转换为字典,以便我可以将其转换为 JSON。问题 How to make a class JSON serializable 建议使用 myClass.__dict__
,但是,使用它不会将任何内部 class 转换为 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 序列化。如何将 class AND INNER 类 转换为 JSON 可序列化对象?
虽然 myClass.__dict__
不适用于内部 classes,但您可以定义自己的方法将 class 转换为字典,只要您知道哪些字段是对象。
下面的例子...
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。
如果您不知道 class 中的哪些字段是 JSON 可序列化的,哪些是内部 class 字段,您可以迭代 class 中的值的字典,check if they are JSON serializable,并根据需要将它们转换为字典 (value.__dict__
)。
我想自动将 Python class 转换为字典,以便我可以将其转换为 JSON。问题 How to make a class JSON serializable 建议使用 myClass.__dict__
,但是,使用它不会将任何内部 class 转换为 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 序列化。如何将 class AND INNER 类 转换为 JSON 可序列化对象?
虽然 myClass.__dict__
不适用于内部 classes,但您可以定义自己的方法将 class 转换为字典,只要您知道哪些字段是对象。
下面的例子...
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。
如果您不知道 class 中的哪些字段是 JSON 可序列化的,哪些是内部 class 字段,您可以迭代 class 中的值的字典,check if they are JSON serializable,并根据需要将它们转换为字典 (value.__dict__
)。