


Objekte JSON-serialisierbar machen mit dem Standard-Encoder
Die Standardmethode zum Serialisieren benutzerdefinierter, nicht serialisierbarer Objekte in JSON umfasst die Unterklassifizierung von json.JSONEncoder und die Übergabe eines benutzerdefinierten Encoders an json.dumps(). Dies führt normalerweise zu Code, der etwa so aussieht:
<code class="python">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))</code>
Was aber, wenn Sie ein Objekt mit dem Standard-Encoder serialisierbar machen möchten? Leider bietet das JSON-Modul keine einfache Lösung.
Verwendung von Monkey-Patching für die Standardkodierung
Trotz der Einschränkungen des JSON-Moduls ist es möglich, die gewünschte Funktionalität durch eine Technik namens Affenflicken. Dies beinhaltet die Änderung des Standardverhaltens des JSON-Moduls durch Ersetzen seiner Methode default().
Durch die Erstellung eines Moduls, das die Methode JSONEncoder.default() ändert, sind alle nachfolgenden JSON-Serialisierungsvorgänge ebenso betroffen wie Module in sys.modules zwischengespeichert. Das folgende eigenständige Modul zeigt, wie dieser Monkey-Patch implementiert wird:
<code class="python">import json def _default(self, obj): return getattr(obj.__class__, "to_json", _default.default)(obj) _default.default = JSONEncoder.default JSONEncoder.default = _default</code>
Um dieses Monkey-Patch-Modul zu verwenden, importieren Sie es einfach und die Änderungen werden automatisch auf das JSON-Modul angewendet.
Hinzufügen einer speziellen Methode zur Objektserialisierung
Um die automatische JSON-Serialisierung Ihrer benutzerdefinierten Klassen zu ermöglichen, können Sie darin eine spezielle Methode namens __json__ definieren. Der JSONEncoder sucht nach dieser Methode und verwendet ihren Rückgabewert für die Serialisierung. Dadurch entfällt die Notwendigkeit expliziter to_json()-Methoden.
Python-Objekte mit Pickle serialisieren
Ein weiterer Ansatz zur automatischen Serialisierung besteht darin, das Pickle-Modul in Verbindung mit dem mit Monkey gepatchten JSONEncoder zu verwenden. Indem Sie die Methode default() überschreiben, um Python-Objekte auszuwählen, die keine Standard-JSON-Typen sind, können Sie eine Serialisierung erreichen, ohne dass spezielle Klassenmethoden erforderlich sind.
Deserialisierung mit Pickle
Zur Rekonstruktion des ursprünglichen Python Um Objekte aus der durch die Pickle-basierte Serialisierung erzeugten JSON-Darstellung zu erhalten, können Sie während der Deserialisierung eine benutzerdefinierte object_hook-Funktion bereitstellen. Diese Funktion kann den während der Serialisierung hinzugefügten Schlüssel „_python_object“ erkennen und ihn verwenden, um das ursprüngliche Objekt mit pickle.loads() zu rekonstruieren.
Fazit
Während das JSON-Modul keine direkte Funktion bereitstellt Eine Möglichkeit, Objekte mit dem Standard-Encoder JSON-serialisierbar zu machen, ist durch Monkey-Patching oder die Verwendung des Pickle-Moduls möglich. Der Pickle-Ansatz ermöglicht die automatische Serialisierung der meisten Python-Objekte und ist somit eine allgemeinere Lösung.
Das obige ist der detaillierte Inhalt vonWie kann ich benutzerdefinierte JSON-Objekte mit dem Standard-Encoder in Python serialisierbar machen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Python ist eine interpretierte Sprache, enthält aber auch den Zusammenstellungsprozess. 1) Python -Code wird zuerst in Bytecode zusammengestellt. 2) Bytecode wird von Python Virtual Machine interpretiert und ausgeführt. 3) Dieser Hybridmechanismus macht Python sowohl flexibel als auch effizient, aber nicht so schnell wie eine vollständig kompilierte Sprache.

UseaforloopwheniteratoverasequenceOrforaPecificNumberoftimes; UseaWhileloopWencontiningUntilAconDitionisMet.ForloopsardealForknown -Sequencies, während whileloopSuituationen mithungeterminediterationen.

PythonloopscanleadtoErors-ähnliche Finanzeloops, ModificingListsDuringiteration, Off-by-Oneerrors, Zero-Indexingissues und Nestroxinefficiens.toavoidthese: 1) Verwenden Sie

ForloopSareadVantageousForknowniterations und Sequences, OfferingImplicity und Readability;

PythonusesahybridmodelofCompilation und Interpretation: 1) thepythonInterPreterCompilessourceCodeIntoplatform-unintenpendentBytecode.2) Thepythonvirtualmachine (PVM) ThenexexexexecthisByTeCode, BalancingeAnsewusewithperformance.

Pythonisbothinterpreted und kompiliert.1) ItscompiledToByteCodeForPortabilityAcrossplatform.2) thytecodeTheninterpreted, und das ErlaubnisfordyNamictyPingandRapidDevelopment zulässt, obwohl es sich

ForloopsaridealWenyouKnowtHenumberofofiterationssinadvance, während whileloopsarebetterForsituationswhereyouneedtoloopuntilaconditionismet.forloopsaremoreffictionAndable, geeigneter Verfaserungsverlust, whereaswiloopsofofermorcontrolanduseusefulfulf

Forloopsareusedwhenthenumberofiterationsisknowninadvance,whilewhileloopsareusedwhentheiterationsdependonacondition.1)Forloopsareidealforiteratingoversequenceslikelistsorarrays.2)Whileloopsaresuitableforscenarioswheretheloopcontinuesuntilaspecificcond


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Sicherer Prüfungsbrowser
Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.
