Warum funktioniert die json-Serialisierung von datetime-Objekten in Python nicht ohne weiteres für datetime-Objekte?
Warum funktioniert die json-Serialisierung nicht für datetime-Objekte . So wie ich das verstehe json-Serialisierung, die die grundlegende Idee für jedes Objekt werden kann, rufen Sie die __str__
builtin-Funktion und dann urlencode das Objekt, das Sie bekommen, als eine Antwort. Aber im Fall von datetime bekomme ich die folgende Fehlermeldung
TypeError: datetime.datetime(2012, 5, 23, 18, 38, 23, 37566) is not JSON serializable
zwar gibt es eine __str__
ich.e ein Weg von stringifying das Objekt bereits verfügbar ist , Aber es scheint eine bewusste Entscheidung, es nicht tun , warum sollte das der Fall sein?
InformationsquelleAutor der Frage dusual | 2012-05-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, es funktioniert nicht so in
json
Modul. Das Modul bietet Ihnen eine Standard-encoder:json.JSONEncoder
. Sie verlängern müssen dies, um Ihre Umsetzungdefault
Methode zur Serialisierung von Objekten. So etwas wie dieses:Als andere richtig darauf hingewiesen, dass der Grund dafür ist, dass die standard für json nicht angeben, wie Datum und Zeit dargestellt werden können.
InformationsquelleAutor der Antwort Vikas
Wie würden Sie wie Sie serialisiert werden?
JSON nicht angeben, wie Sie zu behandeln Termine, so dass die python
json
Bibliothek kann die Entscheidung über die weitere Vorgehensweise dann stellen diese für Sie. Dass ganz davon ab, wie die andere Seite (browser, script, was auch immer) verarbeitet Daten im JSON-Format als auch.InformationsquelleAutor der Antwort Martijn Pieters
Einen einfachen Weg, um patch das json-Modul, so dass die Serialisierung unterstützen würde datetime.
Als json-Serialisierung, wie Sie es immer tun - dieses mal mit datetime serialisiert wird, als isoformat.
Ergibt: '{"created": "2015-08-26T14:21:31.853855"}'
Mehr details zu sehen und einige Worte der Vorsicht:
StackOverflow: JSON datetime zwischen Python und JavaScript
InformationsquelleAutor der Antwort davidhadas
Wenn Sie möchten, um die Kodierung und Dekodierung von datetimes die zimmerreserviereung, ohne das es zu implementieren, die Sie verwenden können,json_trickswas ist ein wrapper fügt hinzu, dass die Kodierung und Dekodierung für verschiedene populäre Arten. Einfach zu installieren:
dann von dort zu importieren
json_tricks
stattjson
z.B.:Disclaimer: es ist von mir gemacht. Weil ich hatte das gleiche problem.
Wenn Sie wollen, um automatisch zu serialisieren alles, was stringified, die Sie tun können, mit nur die standard-Implementierung sehr einfach:
Aber beachten Sie, dass dieses hat Nachteile, z.B. keine von Ihnen deserialisiert werden, ohne zusätzlichen Aufwand, und vielleicht manchmal, Sie wollen einfach nicht zu serialisieren, etwas (wie eine Funktion von einem großen numpy-array), aber eine Warnung statt, die in dieser Methode wird schweigen.
InformationsquelleAutor der Antwort Mark