Как исключить определенные поля для сериализации с помощью jsonpickle?

Я использую расширение SQLAlchemy с Flask. При сериализации моих моделей (которые также используются для операций с базой данных), используя jsonpickle, я хочу, чтобы некоторые конкретные атрибуты игнорировались. Есть ли способ, который позволяет мне устанавливать эти правила?

SQLAlchemy добавляет к объекту атрибут с именем _sa_instance_state . Одним словом, я не хочу, чтобы это поле находилось на выходе JSON.

One Solution collect form web for “Как исключить определенные поля для сериализации с помощью jsonpickle?”

Вы не можете сказать, что сортировщик по умолчанию игнорирует что-то, нет.

jsonpickle поддерживает методы pickle __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__ будут обработаны дальше, рекурсивно, нет необходимости беспокоиться об обработке подобъектов там.

Если добавление __getstate__ и __setstate__ не является параметром, вы также можете зарегистрировать собственный обработчик сериализации для своего класса; недостатком является то, что в то время как __getstate__ может уйти, просто вернув словарь, пользовательскому обработчику необходимо будет вернуть полностью сплющенное значение.

  • Значение по умолчанию для столбца сохраняется в таблице
  • не удалось создать автоинкрементный первичный ключ с фляжкой-sqlalchemy
  • Решение PyCharm - flask.ext.sqlalchemy vs flask_sqlalchemy
  • Работа с дублирующимися первичными ключами при вставке в SQLAlchemy (декларативный стиль)
  • Фильтр по внукам в SQLAlchemy
  • Flask-SQLAlchemy: не удается повторно подключиться до отмены отката транзакции
  • SQLAlchemy: В чем разница между flush () и commit ()?
  • Используйте sqlalchemy для выбора только одной строки из связанной таблицы
  • Python - лучший язык программирования в мире.