simplejson.dumps(dict) 报错 "not JSON serializable
我有一个Python字典,里面的键是字符串,值是一些MyObject对象的列表。
如果我执行
simplejson.dumps(dict)
就会出现“我的对象无法被转换成JSON格式”的错误。
我该怎么做才能避免这个错误呢?还有,怎么才能让MyObject对象可以被转换成JSON格式呢?
1 个回答
8
正确的答案
为了让你的 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
也会被序列化,而你不需要做额外的操作。
简化版
如果你只想把实例变量的名字和它们对应的值一一对应起来,你可以使用一些 Python 内置的魔法。每当你想要序列化一个更复杂的对象(同样,只是使用一一对应的变量和值),只需调用这一行:
simplejson.dumps(anyObj, default=lambda obj: obj.__dict__)
对于给定的 MyObject
实例,它的表现和前面提到的 serialize
方法是一样的。