метод по умолчанию для сериализации пользовательского, неэтериаризируемых объектов в JSON включает в себя подкласс json.jsonencoder и передачу индивидуального секаниста в json.dumps (). Это обычно приводит к коду, который выглядит примерно так:
class CustomEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Foo):
return obj.to_json()
return json.JSONEncoder.default(self, obj)
print(json.dumps(obj, cls=CustomEncoder))
Однако, что если вы хотите сделать сериализуемый объект, используя энкодер по умолчанию? К сожалению, нет простого решения, предлагаемого модулем JSON.
, несмотря на ограничения модуля JSON, можно достичь желаемой функциональности с помощью метода, называемого обезьян. Это включает в себя изменение поведения по умолчанию модуля JSON путем замены его метода default ().
, создав модуль, который изменяет метод jsonencoder.default (), все последующие операции сериализации JSON будут затронуты, так как модули кэшируются в sys.modules. Следующий автономный модуль демонстрирует, как реализовать этот обезьян-патч:
import json
def _default(self, obj):
return getattr(obj.__class__, "to_json", _default.default)(obj)
_default.default = JSONEncoder.default
JSONEncoder.default = _default
для использования этого модуля с обезьяной, просто импортируйте его, и он автоматически применяет изменения в модуле JSON.
, чтобы включить автоматическую сериализацию вашего специального метода, вы можете определить, что вы можете определить. Jsonencoder проверит этот метод и использует его возвратное значение для сериализации. Это позволяет избежать необходимости явных методов to_json ().
Другой подход к автоматической сериализации-использовать модуль рассола в сочетании с обезьянным JSonEncoder. Переопределяя метод по умолчанию (), чтобы оформить объекты Python, которые не являются стандартными типами JSON, вы можете достичь сериализации без необходимости особых методов класса.
, чтобы реконструировать оригинальные объекты Python из представления JSON, создаваемого основанным на пикле сериализации, вы можете обеспечить функцию пользовательского объекта во время DeseriatifitiatifitiziTiatifitifiTiatifiTiatifiTiatifiTiatifitiziTiatifitiziTiatifitifiTiatifitiatifitiatifitiatifitiatifitiative. Эта функция может обнаружить клавишу «_python_object», добавленную во время сериализации, и использовать его для реконструкции исходного объекта с помощью Pickle.loads ().
, в то время как модуль JSON не обеспечивает прямой способ сделать объекты json serializeable с помощью невыполнения энкодера, что он может достичь этого с помощью или с использованием, используя или с помощью, используя или с использованием, используя или использует модле. Подход Pickle обеспечивает автоматическую сериализацию большинства объектов Python, что делает его более обобщенным решением.
]Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3