[英]excluding fields from json serialization in python using jsonpickle
[英]How to exclude specific fields on serialization with jsonpickle?
我正在使用Flask的SQLAlchemy扩展。 在使用jsonpickle序列化我的模型(也用于数据库操作)时 ,我想要忽略一些特定的属性。 有没有办法让我设定这些规则?
SQLAlchemy将一个名为_sa_instance_state
的属性添加到对象中。 总之,我不希望这个字段在JSON输出中。
您不能告诉默认的类选择器忽略某些东西,不。
jsonpickle
确实支持pickle
模块 __getstate__
和__setstate__
方法。 如果您的类实现了这两个方法,那么jsonpickle
将使用返回的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__
将以递归方式进一步处理,因此无需担心在那里处理子对象。
如果添加__getstate__
和__setstate__
不是一个选项,您还可以为您的类注册自定义序列化处理程序 ; 缺点是虽然__getstate__
只能返回一个字典,但自定义处理程序需要返回一个完全展平的值。
这个将帮助其他人完成他们的任务:
像你的自定义jsonpickle
包一样在类包中创建一个这样的类:
class SetGetState:
def __getstate__(self):
state = self.__dict__.copy()
try:
class_name = '_' + self.__class__.__name__ + '__'
new_items = {key:value for key, value in state.items() if class_name not in key}
return new_items
except KeyError:
pass
return state
并且在类中继承这个不需要私有属性序列化
class Availability(jsonpickle.SetGetState):
pass
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.