Wie gehe ich mit nicht-JSON-serialisierbaren Typen in der Python-JSON-Serialisierung um?

Mary-Kate Olsen
Freigeben: 2024-10-25 00:28:30
Original
204 Leute haben es durchsucht

How to Handle Non-JSON Serializable Types in Python JSON Serialization?

Umgang mit nicht-JSON-serialisierbaren Typen bei der JSON-Serialisierung

Problem:
Codieren eines Python-Sets mit benutzerdefinierten Objekte mit hash und eq lösen einen TypeError in der json.dumps-Methode aus.

Benutzerdefinierter Encoder für Sets:
Sie können erstellen ein benutzerdefinierter Encoder, der Sätze verarbeitet, indem er sie vor dem Codieren in Listen umwandelt:

<code class="python">import json

class SetEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, set):
            return list(obj)
        return json.JSONEncoder.default(self, obj)</code>
Nach dem Login kopieren

Umgang mit verschachtelten und komplexen Typen:
Sie können anpassen, wie verschachtelte und komplexe Typen codiert werden Überschreiben Sie die Standardmethode in Ihrem Encoder, um verschiedene Datentypen zu berücksichtigen. Um beispielsweise Datumsangaben zu verarbeiten, könnten Sie Folgendes verwenden:

<code class="python">class CustomEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime.datetime):
            return obj.isoformat()
        return json.JSONEncoder.default(self, obj)</code>
Nach dem Login kopieren

Umgang mit Schlüssel-Wert-Konvertierungen:
Die Standardmethode im JSONEncoder wendet die von Ihnen definierte Konvertierung an alle Werte im Objekt. Es wird nicht zwischen Schlüsseln und Werten unterschieden. Daher müssten Sie in Ihrem benutzerdefinierten Encoder Logik implementieren, um Schlüssel-zu-Wert-Konvertierungen explizit zu verarbeiten.

Beispiel für verschachtelte Objekte:
Um verschachtelte Objekte zu verarbeiten, können Sie rekursiv vorgehen Rufen Sie den Serialisierungsprozess für ihre Werte auf. Um beispielsweise verschachtelte Mengen zu verarbeiten, könnten Sie Folgendes tun:

<code class="python">class NestedSetEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, set):
            return list(obj)
        if isinstance(obj, dict):
            return {key: NestedSetEncoder().encode(value) for key, value in obj.items()}
        return json.JSONEncoder.default(self, obj)</code>
Nach dem Login kopieren

Indem Sie den JSONEncoder erweitern und die Standardmethode zur Verarbeitung bestimmter Datentypen überschreiben, können Sie den JSON-Serialisierungsprozess anpassen, um verschiedene komplexe und nicht komplexe Datentypen zu berücksichtigen -Standardtypen.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit nicht-JSON-serialisierbaren Typen in der Python-JSON-Serialisierung um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!