Python-Klassen JSON serialisierbar machen
Serialisierung ermöglicht die Konvertierung von Objekten in ein für Persistenz oder Übertragung geeignetes Format. Die Serialisierung benutzerdefinierter Klassen in JSON führt aufgrund ihrer nicht JSON-serialisierbaren Natur häufig zu einem TypeError.
Implementieren einer toJSON()-Methode
Ein Ansatz besteht darin, eine zu erstellen toJSON()-Methode für die Klasse, die ihre Serialisierung manuell übernimmt. Dies erfordert die Implementierung einer benutzerdefinierten JSON-Serialisierungsfunktion und die Gewährleistung der ordnungsgemäßen Handhabung verschachtelter Objekte.
import json class FileItem: def __init__(self, fname): self.fname = fname def toJSON(self): return json.dumps(self.__dict__) x = FileItem('/foo/bar') print(x.toJSON()) # Outputs: '{"fname": "/foo/bar"}'
Verwenden der Orjson-Bibliothek
Für eine umfassende Als Lösung sollten Sie die Verwendung der orjson-Bibliothek in Betracht ziehen, die eine effiziente und anpassbare Möglichkeit bietet, benutzerdefinierte Klassen in JSON zu serialisieren. Es bietet erweiterte Funktionen wie Schema-Erzwingung und Unterstützung für komplexe Objektstrukturen.
import orjson @orjson.dataclass class FileItem: fname: str x = FileItem('/foo/bar') json_bytes = orjson.dumps(x) # Returns a byte string print(json_bytes.decode()) # Outputs: '{"fname": "/foo/bar"}'
Schlussfolgerung
Verwenden eines benutzerdefinierten toJSON() -Methode oder die orjson-Bibliothek bieten praktische Lösungen für die Serialisierung von Python-Klassen in JSON. Beide Ansätze stellen sicher, dass Objekte effektiv in einem JSON-Format dargestellt und übertragen werden können.
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