Ich möchte ausgeben, während der Wert des Typs (z. B. datetime) konvertiert wird, der bei der Ausgabe von json mit Python nicht unterstützt wird

Ich möchte ausgeben, während der Wert des Typs (z. B. datetime) konvertiert wird, der bei der Ausgabe von json mit Python nicht unterstützt wird.

TypeError tritt in einem Wörterbuch auf, das nicht unterstützte Typen enthält

Sie können json.dumps (json.dump) verwenden, wenn Sie versuchen, dict in json in Python zu konvertieren. Wenn zu diesem Zeitpunkt ein Wert eines nicht unterstützten Typs enthalten ist, tritt die folgende Ausnahme auf.

# TypeError: datetime.datetime(2000, 1, 1, 0, 0) is not JSON serializable

Wenn beispielsweise die Wörterbuchperson, die das datetime-Objekt enthält, auf die Spezifikation json.dumps festgelegt ist, lautet das Ergebnis wie folgt.

import json
from datetime import datetime

person = {
    "name": "Foo",
    "age": 20,
    "created_at": datetime(2000, 1, 1)
}

json.dumps(person)
# TypeError: datetime.datetime(2000, 1, 1, 0, 0) is not JSON serializable

Indem Sie dem Standardargument eine Funktion zuweisen, können Sie einen Rückruf für einen nicht unterstützten Typ festlegen.

json.dumps kann mehrere Argumente annehmen.

json.dumps = dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, inden
t=None, separators=None, encoding='utf-8', default=None, sort_keys=False, **kw)
    Serialize ``obj`` to a JSON formatted ``str``.
...

Wenn Sie dem Standardargument in diesem Fall die folgende Funktion zuweisen, können Sie die Zuordnung für das nicht unterstützte später angeben.

def support_datetime_default(o):
    if isinstance(o, datetime):
        return o.isoformat()
    raise TypeError(repr(o) + " is not JSON serializable")

Jetzt können Sie es mit json.dumps konvertieren.

person = {
    "name": "Foo",
    "age": 20,
    "created_at": datetime(2000, 1, 1)
}


json.dumps(person, default=support_datetime_default)
# {"created_at": "2000-01-01T00:00:00", "age": 20, "name": "Foo"}

Oder erstellen Sie eine Klasse, die JSONEncoder erbt

Sie können die für die Konvertierung in json.dumps verwendete Klasse mit dem Argument cls ändern (standardmäßig wird json.JSONEncoder verwendet). Daher ist es in Ordnung, eine Klasse zu definieren, die JSONEncoder wie unten gezeigt erbt, und diese an cls zu übergeben.

class DateTimeSupportJSONEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, datetime):
            return o.isoformat()
        return super(DateTimeSupportJSONEncoder, self).default(o)

json.dumps(person, cls=DateTimeSupportJSONEncoder)
# {"created_at": "2000-01-01T00:00:00", "age": 20, "name": "Foo"}

Recommended Posts

Ich möchte ausgeben, während der Wert des Typs (z. B. datetime) konvertiert wird, der bei der Ausgabe von json mit Python nicht unterstützt wird
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
Ich möchte initialisieren, wenn der Wert leer ist (Python)
Was tun, wenn der Werttyp in Python nicht eindeutig ist?
Ich möchte die Anzahl von num_boost_round anzeigen, wenn Early_stopping mithilfe des XGBoost-Rückrufs angewendet wird (nicht erreicht).
Ich möchte das Problem des Speicherverlusts bei der Ausgabe einer großen Anzahl von Bildern mit Matplotlib lösen
Bei der Konvertierung von CSV in JSON mit Python bin ich auf einen Zeichencode gestoßen
[Golang] Ich möchte dem json-Tag des int-Typ-Felds der Struktur omitempty hinzufügen, damit es ignoriert wird, wenn 0 eingegeben wird.
[Python Data Frame] Wenn der Wert leer ist, füllen Sie ihn mit dem Wert einer anderen Spalte.
Verwenden Sie Ruby und Python, um die Wahrscheinlichkeit zu ermitteln, dass eine Karte mit einer natürlichen Zahl von 1 bis 100 ein Vielfaches von 3 und kein Vielfaches von 5 ist.
Ich möchte mit Python-Datenklasse nach hinten erben
Beim Schreiben in eine CSV-Datei mit Python habe ich einen kleinen Fehler gemacht und den Liefertermin nicht eingehalten
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich möchte eine andere Version von Python mit pyvenv angeben
Ich möchte die Natur von Python und Pip kennenlernen
Keras Ich möchte die Ausgabe einer beliebigen Ebene erhalten !!
[Python3] Liste der Websites, auf die ich beim Starten von Python verwiesen habe
Ich möchte mit Python eine beliebige URL aus der Zeichenfolge der HTML-Quelle extrahieren
Eine Geschichte, die nicht funktioniert hat, als ich versucht habe, mich mit dem Python-Anforderungsmodul anzumelden
Beim Inkrementieren des Werts eines Schlüssels, der nicht vorhanden ist
Konvertieren Sie in eine Zeichenfolge, während Sie die Standardausgabe mit dem Python-Unterprozess ausgeben
Die Geschichte, dass die Version von Python 3.7.7 nicht an Heroku angepasst wurde
Wie man Japanern nicht entgeht, wenn man mit json in Python umgeht
Ich möchte einen Platzhalter verwenden, den ich mit Python entfernen möchte
Ich möchte das Wetter mit LINE bot feat.Heroku + Python wissen
Geben Sie den Inhalt von ~ .xlsx im Ordner mit Python in HTML aus
Ich möchte Python GUI ausführen, wenn Raspberry Pi startet
Zeitzonenspezifikation beim Konvertieren einer Zeichenfolge in einen Datums- / Uhrzeittyp mit Python
Ich möchte sowohl den Schlüssel als auch den Wert des Python-Iterators verwenden
Ich möchte die Position meines Gesichts mit OpenCV überprüfen!
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Ich möchte mit Python debuggen
Ich hatte Python satt und analysierte die Daten mit Nehan (Corona verwandt, ist das Wort jetzt?)
Ich habe versucht, die Liste der Drehzahlen des SSH-Anmeldeziels mit Python + openpyxl in einer Excel-Tabelle auszugeben.
Ich möchte wütend auf meine Mutter werden, wenn die Erinnerung knapp ist
Ich habe versucht, Deep Learning zu implementieren, das nicht nur mit NumPy tiefgreifend ist
Mit PEP8 und PEP257 ist es nicht peinlich, Python-Codierung zu zeigen!
Python Hinweis: Wenn Sie die Attribute eines Objekts kennen möchten
Ich möchte das Ergebnis von "Zeichenfolge" .split () in Python stapelweise konvertieren
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich möchte meine Gefühle mit den Texten von Mr. Children ausdrücken
Ich möchte das automatische Löschen des tmp-Bereichs in RHEL7 stoppen
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
[Einführung in Python] Wie wird mit der continue-Anweisung wiederholt?
Ich habe die Geschwindigkeit der Listeneinschlussnotation für und während mit Python2.7 gemessen.
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
Ich möchte CSV Zeile für Zeile lesen, während ich den Feldtyp konvertiere (während der Fortschrittsbalken angezeigt wird) und ihn verarbeiten.
Ich möchte verhindern, dass der an den Raspberry Pi (jessie) angeschlossene Lautsprecher beim Neustart des Betriebssystems bon wird (Python-Skript).
Umgang mit dem Problem, dass japanische Zeichen bei der Ausgabe von Protokollen mit dem JSON-Protokollformatierer verstümmelt sind
[Python] Umgang mit dem is-Instanzfehler "is instance () arg 2 muss ein Typ oder ein Tupel von Typen sein"
[Python3] Code, der verwendet werden kann, wenn Sie die Erweiterung eines Bildes sofort ändern möchten
Ich bin ein Amateur am 14. Tag von Python, aber ich möchte maschinelles Lernen mit Scicit-Learn ausprobieren
Ich möchte kühl auf die Konsole ausgeben
Ich möchte Protokolle mit Python analysieren
Ich möchte mit aws mit Python spielen
[Python] [Meta] Ist der Python-Typ ein Typ?
Ich möchte den Pfad des Verzeichnisses abrufen, in dem die laufende Datei gespeichert ist.