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