Der obige Code schlägt mit einem TypeError
fehl, da Schlüssel von JSON-Objekten Zeichenfolgen sein müssen. Die Funktion json.dumps
hat einen Parameter namens default, der aufgerufen wird, wenn der Wert eines JSON-Objekts TypeError
erhöht, aber es scheint keine Möglichkeit zu geben, dies für die Taste
Sie können json.JSONEncoder erweitern, um einen eigenen Encoder zu erstellen, der mit datetime.datetime-Objekten (oder Objekten eines beliebigen Typs) so umgehen kann, dass ein String erstellt wird, der als neuer String reproduziert werden kann datetime.datetime-Instanz. Ich glaube, es sollte so einfach sein wie json.JSONEncoder Anruf repr () auf Ihre Datetime.datetime Instanzen.
Die Vorgehensweise dazu ist in den json-Moduldokumenten beschrieben.
Das json-Modul prüft den Typ jedes zu kodierenden Wertes und kennt standardmäßig nur Dicts, Listen, Tupel, Strings, Unicode-Objekte, int, long, float, boolean und none: -)
Von Bedeutung für Sie könnte auch das Argument skipkeys zum JSONEncoder sein.
Nach dem Lesen Ihrer Kommentare bin ich zu dem Schluss gekommen, dass es keine einfache Lösung dafür gibt, dass JSONEncoder die Schlüssel von Wörterbüchern mit einer benutzerdefinierten Funktion codiert. Wenn Sie interessiert sind, können Sie sich die Quelle und die Methoden iterencode () ansehen, die _eitencode () aufrufen, der _iterencode_dict () aufruft, wo der Typfehler ausgelöst wird.
Am einfachsten wäre es, ein neues Diktat mit isoformatierten Schlüsseln zu erstellen:
%Vor%Was zurückgibt '{"2010-09-15T23: 24: 36.169710": "foo", "2010-09-15T23: 24: 36.169723": "bar"}'. Für Feinheiten, wickle es in eine Funktion: -)