Heim >Backend-Entwicklung >Python-Tutorial >Warum unterscheidet sich die Reihenfolge der Schlüssel in meiner JSON-Ausgabe von der Reihenfolge in meinem Python-Wörterbuch, das „json.dumps' verwendet?
Out-of-Order-Elemente in JSON-Objekten mit „json.dumps“?
In Ihrem Code verwenden Sie „json .dumps“, um eine Liste von Wörterbüchern in JSON zu konvertieren. Sie haben jedoch festgestellt, dass die Reihenfolge der Schlüssel in den einzelnen Wörterbüchern nicht den Erwartungen entspricht. Insbesondere müssen die Schlüssel in der Reihenfolge „id“, „name“ und „timezone“ erscheinen.
Begründung
Beide Python-Wörterbücher (vor Python 3.7) und JSON-Objekte sind ungeordnete Sammlungen. Dies bedeutet, dass die Reihenfolge der Schlüssel in einem Wörterbuch oder JSON-Objekt nicht garantiert ist.
Lösung 1: Schlüssel sortieren
Sie können den Parameter „sort_keys“ von verwenden „json.dumps“, um die Schlüssel im Ausgabe-JSON zu sortieren. Zum Beispiel:
<code class="python">import json countries.append({"id":row.id,"name":row.name,"timezone":row.timezone}) print(json.dumps(countries, sort_keys=True))</code>
Dadurch wird JSON mit den Schlüsseln in der folgenden Reihenfolge ausgegeben:
[ {"id": 1, "name": "Mauritius", "timezone": 4}, {"id": 2, "name": "France", "timezone": 2}, {"id": 3, "name": "England", "timezone": 1}, {"id": 4, "name": "USA", "timezone": -4} ]
Lösung 2: OrderedDict verwenden
Wenn Sie eine bestimmte Reihenfolge für die Schlüssel benötigen, können Sie die Klasse „collections.OrderedDict“ verwenden. OrderedDict behält die Reihenfolge der darin eingefügten Schlüssel bei. Zum Beispiel:
<code class="python">from collections import OrderedDict countries_by_id = OrderedDict() countries_by_id["id"] = row.id countries_by_id["name"] = row.name countries_by_id["timezone"] = row.timezone print(json.dumps(countries_by_id))</code>
Dadurch wird JSON mit den Schlüsseln in der Reihenfolge „id“, „name“ und „timezone“ ausgegeben.
Zusätzlicher Hinweis
In Python 3.6 und höher wird die Reihenfolge der Schlüsselwortargumente in Wörterbüchern beibehalten. Dies bedeutet, dass Sie das gleiche Ergebnis wie mit OrderedDict erzielen können, indem Sie beim Erstellen des Wörterbuchs einfach die Schlüssel in der gewünschten Reihenfolge angeben:
<code class="python">countries = {"id": row.id, "name": row.name, "timezone": row.timezone}</code>
Dadurch bleibt die Reihenfolge der Schlüssel im Ausgabe-JSON automatisch erhalten.
Das obige ist der detaillierte Inhalt vonWarum unterscheidet sich die Reihenfolge der Schlüssel in meiner JSON-Ausgabe von der Reihenfolge in meinem Python-Wörterbuch, das „json.dumps' verwendet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!