«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу сделать пользовательские объекты json serializable, используя энкодер по умолчанию в Python?

Как я могу сделать пользовательские объекты json serializable, используя энкодер по умолчанию в Python?

Опубликовано в 2025-03-25
Просматривать:498

How can I make custom objects JSON serializable using the default encoder in Python?

создание объектов JSON Serializeable с кодером по умолчанию

метод по умолчанию для сериализации пользовательского, неэтериаризируемых объектов в 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 ().

сериализации объектов Python с Pickle

Другой подход к автоматической сериализации-использовать модуль рассола в сочетании с обезьянным JSonEncoder. Переопределяя метод по умолчанию (), чтобы оформить объекты Python, которые не являются стандартными типами JSON, вы можете достичь сериализации без необходимости особых методов класса.

Deshialization с Pickle

, чтобы реконструировать оригинальные объекты Python из представления JSON, создаваемого основанным на пикле сериализации, вы можете обеспечить функцию пользовательского объекта во время DeseriatifitiatifitiziTiatifitifiTiatifiTiatifiTiatifiTiatifitiziTiatifitiziTiatifitifiTiatifitiatifitiatifitiatifitiatifitiative. Эта функция может обнаружить клавишу «_python_object», добавленную во время сериализации, и использовать его для реконструкции исходного объекта с помощью Pickle.loads ().

Заключение

, в то время как модуль JSON не обеспечивает прямой способ сделать объекты json serializeable с помощью невыполнения энкодера, что он может достичь этого с помощью или с использованием, используя или с помощью, используя или с использованием, используя или использует модле. Подход Pickle обеспечивает автоматическую сериализацию большинства объектов Python, что делает его более обобщенным решением.

]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3