我有一个包含活动用户身份和权限的自定义类Passport。我过去常常将它存储在会话中:
p = Passport()
p.do_something_fancy()
session["passport"] = p
它刚刚起作用。现在,在服务器升级后,我收到此错误:
TypeError: <userman.Passport instance at 0x7f06e9356f38> is not JSON serializable
我想它与Flask中的一些升级有关,现在要求对象可以通过JSON序列化存储在会话中。但是如何正确地使对象JSON可序列化?也许我必须提供一个序列化方法和一个反序列化方法,以便在再次加载时恢复对象状态?
答案 0 :(得分:3)
您必须创建一个自定义JSONEncoder
类,并告诉Flask将其用于JSON序列化/反序列化。
以下是粗略的工作原理:
from flask.json import JSONEncoder
class CustomJSONEncoder(JSONEncoder):
def default(self, obj):
if isinstance(obj, Passport):
# Implement code to convert Passport object to a dict
return passport_dict
else:
JSONEncoder.default(self, obj)
# Now tell Flask to use the custom class
app.json_encoder = CustomJSONEncoder