Heim >Backend-Entwicklung >Python-Tutorial >Wie gehe ich mit nicht-JSON-serialisierbaren Typen in der Python-JSON-Serialisierung um?

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-25 00:28:30289Durchsuche

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>

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>

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>

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!

Stellungnahme:
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