Ich habe ein Problem, wenn ich JSON-String in Python-Wörterbuch konvertieren möchte. Ich habe String wie
%Vor%wenn ich etwas schreibe wie
%Vor%Ich gette Wörterbuch, aber die Reihenfolge der Schlüssel ist nicht die gleiche wie in String (es ist nicht Name, Preis ...). Wie konvertiert man die JSON-Zeichenfolge in ein Wörterbuch und speichert die Reihenfolge in den Schlüsseln?
Seit Python 2.7 haben Sie OrderedDict
Modul von collections
Diese Art von Wörterbuch behält die Reihenfolge der Elemente bei.
Aus Python-Dokumenten:
json.load(fp[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
Deserialize fp (a .read () - unterstützendes dateiähnliches Objekt mit a JSON-Dokument) zu einem Python-Objekt.
Wenn der Inhalt von fp mit einer ASCII-basierten Codierung codiert ist, anders als UTF-8 (z.B. latin-1), dann muss ein geeigneter Kodierungsname sein angegeben. Nicht ASCII-basierte Codierungen (wie UCS-2) sind nicht erlaubt und sollte mit codecs.getreader (encoding) (fp), oder verpackt werden einfach zu einem Unicode-Objekt dekodiert und an loads () übergeben.
object_hook ist eine optionale Funktion, die mit dem aufgerufen wird Ergebnis eines beliebigen Objekts literal dekodiert (ein Diktat). Der Rückgabewert von object_hook wird anstelle des dict verwendet. Diese Funktion kann verwendet werden um benutzerdefinierte Decoder zu implementieren (z. B. JSON-RPC-Klassenhinweis).
object_pairs_hook ist eine optionale Funktion, die mit dem aufgerufen wird Ergebnis eines beliebigen Objektliterals, das mit einer geordneten Liste von Paaren dekodiert wurde. Der Rückgabewert von object_pairs_hook wird anstelle von verwendet dict. Diese Funktion kann zum Implementieren benutzerdefinierter Decoder verwendet werden in der Reihenfolge, in der die Schlüssel- und Wertepaare dekodiert werden (z. B. collections.OrderedDict () merkt sich die Reihenfolge der Einfügung). Ob object_hook ist ebenfalls definiert, der object_pairs_hook hat Priorität.
Ich denke, Sie könnten den Parameter object_pairs_hook mit collections.OrderedDict()