我有一个 Python 字典,其中键是字符串,值是 MyObject 对象的列表。如果我执行
simplejson.dumps(dict)
它抛出“MyObject 不是 JSON 可序列化的”。
如何避免此异常,如何使 MyObject 可序列化?
我有一个 Python 字典,其中键是字符串,值是 MyObject 对象的列表。如果我执行
simplejson.dumps(dict)
它抛出“MyObject 不是 JSON 可序列化的”。
如何避免此异常,如何使 MyObject 可序列化?
为了使您的MyObject
序列化,您需要实现一个可以引用的方法dumps
。例如:
class MyObject:
# ...
# MyObject has 3 properties: name (a string), number (an int), and parent (a MyObject)
@staticmethod
def serialize(obj):
return {
"name": obj.name,
"number": obj.number,
"parent": obj.parent
}
# ...
simplejson.dumps(myObjInstance, default=MyObject.serialize)
很酷的是,它dumps
会像所有其他 JSON 可序列化对象一样,递归调用序列化方法。也就是说,obj.parent
也将被序列化,无需您采取任何进一步的行动。
如果您只想将实例变量名称 1-1 映射到它们各自的值,则可以使用一些内置的 Python 魔法。每当您想序列化一个更复杂的对象(同样,仅使用 1-1 变量值映射)时,只需调用此行:
simplejson.dumps(anyObj, default=lambda obj: obj.__dict__)
对于给定的 实例MyObject
,它的行为与上述serialize
方法相同。