Wie kann ein Python-Wörterbuch in JSON geschrieben werden, wenn Schlüssel nicht-triviale Objekte sind?

8
%Vor%

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 . Was ist die eleganteste Art, dies zu umgehen?

    
ipartola 15.09.2010, 20:04
quelle

2 Antworten

4

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

    
ikanobori 15.09.2010, 20:58
quelle
2

Ссылка könnte sein, was Sie wollen. Als ich auf ein ähnliches Problem stieß, endete ich damit:

%Vor%     
seanp2k 09.10.2014 22:26
quelle

Tags und Links