我用的是sqlacalchemy扩展和flask。在使用jsonpickle序列化模型(也用于数据库操作)的同时,我希望忽略一些特定的属性。有没有办法让我制定这些规则?
SQLAlchemy将名为_sa_instance_state
的属性添加到对象中。总之,我不希望这个字段出现在JSON输出中。
最佳答案
不能告诉默认类pickler忽略某些内容,不。jsonpickle
支持pickle
module__getstate__
和__setstate__
方法。如果您的类实现了这两个方法,那么jsonpickle
将使用返回的内容来表示状态。这两种方法都需要实现。
如果未实现__getstate__
,则jsonpickle
将使用__dict__
属性,因此您自己的版本只需使用相同的字典,删除_sa_instance_state
键即可:
def __getstate__(self):
state = self.__dict__.copy()
del state['_sa_instance_state']
return state
def __setstate__(self, state):
self.__dict__.update(state)
无论什么
__getstate__
返回都将被进一步递归地处理,不需要担心在那里处理子对象。如果添加
__getstate__
和__setstate__
不是一个选项,您也可以为您的类注册一个custom serialization handler;缺点是,虽然__getstate__
只需返回一个字典就可以摆脱,但是自定义处理程序将需要返回一个完全扁平的值。关于python - 如何使用jsonpickle排除序列化的特定字段?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18147435/