Wie konvertiert man die JSON-Zeichenfolge in ein Wörterbuch und speichert die Reihenfolge in den Schlüsseln? [Duplikat]

8

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?

    
Damir 18.04.2012, 09:49
quelle

1 Antwort

21

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

verwenden %Vor%     
Diego Navarro 18.04.2012 10:07
quelle

Tags und Links