„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich benutzerdefinierte Objekte mit dem Standard -Encoder in Python serialisierbar machen?

Wie kann ich benutzerdefinierte Objekte mit dem Standard -Encoder in Python serialisierbar machen?

Gepostet am 2025-03-25
Durchsuche:152

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

Objekte json serialisierbar mit dem Standard-Encoder

Die Standardmethode zum Serialisieren benutzerdefinierter, nicht-serialisierbarer Objekte beinhaltet jSON. Dies führt typischerweise zu Code, der so aussieht:

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))

Was ist jedoch, wenn Sie ein Objekt mit dem Standard -Encoder serialisierbar machen möchten? Leider gibt es keine einfache Lösung, die das JSON-Modul anbietet. Dies beinhaltet die Änderung des Standardverhaltens des JSON -Moduls, indem die Standardmethode ()

durch Erstellen eines Moduls ersetzt wird, das die Methode jSonencoder.default (), alle nachfolgenden JSON -Serialisierungsvorgänge, betroffen sind, da die Moduls in SYS.Modulen betroffen sind. Das folgende eigenständige Modul zeigt, wie man diesen Affenpatch implementiert:

JSON importieren def _default (self, obj): return getattr (obj .__ class__, "to_json", _default.default) (obj) _default.default = jsonEncoder.Default JSONECODER.DEFAULT = _DEFAULT

, um dieses affengepattige Modul zu verwenden, einfach die Änderungen am JSON-Modul anwendet. Der JSONEnCODER prüft diese Methode und verwendet seinen Rückgabewert für die Serialisierung. Dies vermeidet die Notwendigkeit von expliziten TO_JSON () -Methoden.
import json

def _default(self, obj):
    return getattr(obj.__class__, "to_json", _default.default)(obj)

_default.default = JSONEncoder.default
JSONEncoder.default = _default

Ein weiterer Ansatz zur automatischen Serialisierung besteht darin, das Pickle-Modul in Verbindung mit dem Affepatched JSonenCoder zu verwenden. Durch Überschreiben der Standard-() -Methode zu Python-Objekten, die nicht Standard-JSON-Typen sind, können Sie eine Serialisierung erreichen, ohne dass spezielle Klassenmethoden erforderlich sind. Diese Funktion kann den während der Serialisierung hinzugefügten Schlüssel '_python_object' erkennen und das Originalobjekt mit pickle.loads () rekonstruieren. Der Pickle -Ansatz ermöglicht die automatische Serialisierung der meisten Python -Objekte, was sie zu einer allgemeineren Lösung macht.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3