python - ¿Cómo excluir campos específicos en la serialización con jsonpickle?
sqlalchemy flask (1)
No puede decirle al selector de clases predeterminado que ignore algo, no.
jsonpickle
es compatible con los métodos pickle
__getstate__
y __setstate__
. Si sus clases implementan esos dos métodos, jsonpickle
utilizará lo que se jsonpickle
para representar el estado en su lugar. Ambos métodos necesitan ser implementados.
Si __getstate__
no está implementado, jsonpickle
usa el atributo __dict__
en su lugar, por lo que su propia versión simplemente necesita usar el mismo diccionario, elimine la clave _sa_instance_state
y listo:
def __getstate__(self):
state = self.__dict__.copy()
del state[''_sa_instance_state'']
return state
def __setstate__(self, state):
self.__dict__.update(state)
Cualquiera que sea __getstate__
returns se procesará más recursivamente, no hay necesidad de preocuparse por manejar subobjetos allí.
Si agregar __getstate__
y __setstate__
no es una opción, también puede registrar un manejador de serialización personalizado para su clase; la desventaja es que mientras __getstate__
puede salirse con la suya simplemente devolviendo un diccionario, un controlador personalizado necesitará devolver un valor completamente aplanado.
Estoy usando la extensión SQLAlchemy con Flask. Mientras serializo mis modelos (que también se usan para operaciones de bases de datos) utilizando jsonpickle, quiero que se ignoren algunos atributos específicos. ¿Hay alguna manera que me permita establecer esas reglas?
SQLAlchemy agrega un atributo denominado _sa_instance_state
al objeto. En una palabra, no quiero que este campo esté en la salida JSON.