Wie werden zwei JSON-Objekte mit denselben Elementen in einer anderen Reihenfolge verglichen?
Wie kann ich testen, ob zwei JSON-Objekte sind gleich in python, wobei die Reihenfolge der Listen?
Zum Beispiel ...
JSON-Dokument eine:
{
"errors": [
{"error": "invalid", "field": "email"},
{"error": "required", "field": "name"}
],
"success": false
}
JSON-Dokument b:
{
"success": false,
"errors": [
{"error": "required", "field": "name"},
{"error": "invalid", "field": "email"}
]
}
a
und b
vergleichen sollte gleich, auch wenn die Reihenfolge der "errors"
Listen sind unterschiedlich.
Kommentar zu dem Problem - Öffnen
Duplikat von stackoverflow.com/questions/11141644/...
Warum nicht einfach Dekodieren und vergleichen? Oder meinst du das die Reihenfolge von "Array" oder
list
- Elemente spielt keine Rolle? @user2085282 diese Frage hat ein anderes problem.
Bitte verzeihen Sie meine Naivität, aber warum? Liste Elemente haben eine bestimmte Reihenfolge für einen Grund.
Wie bereits in dieser Antwort ein JSON-array ist sortiert, so werden diese Objekte mit arrays mit unterschiedlichen Sortierreihenfolgen wäre nicht gleich im strengen Sinne. stackoverflow.com/a/7214312/18891
InformationsquelleAutor der Frage Houssam Hsm | 2014-09-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wollen, dass zwei Objekte mit den gleichen Elementen, aber in einer anderen Reihenfolge vergleichen, gleich, dann ist die offensichtliche Sache zu tun ist, vergleichen Sie sortierte Kopien von Ihnen - zum Beispiel, für den Wörterbüchern vertreten durch Ihre JSON-strings
a
undb
:... aber das funktioniert nicht, weil in jedem Fall die
"errors"
Element der top-level-dict ist eine Liste mit den gleichen Elementen in unterschiedlicher Reihenfolge undsorted()
nicht versuchen, zu Sortieren, also alles außer die "top" - Ebene ein durchsuchbar.Zu beheben, definieren wir eine
ordered
Funktion, die rekursiv Sortieren alle Listen, die es findet (und konvertieren Wörterbücher Listen der(key, value)
Paaren, so dass Sie bestellbar):Wenn wir die Anwendung dieser Funktion auf
a
undb
, vergleichen die Ergebnisse gleich:InformationsquelleAutor der Antwort Zero Piraeus
Anderen Weg sein könnte, zu verwenden
json.dumps(X, sort_keys=True)
option:Diese Werke für verschachtelte dictionaries und Listen.
InformationsquelleAutor der Antwort stpk
Dekodieren und vergleichen Sie Sie als mgilson Kommentar.
Reihenfolge spielt keine Rolle für die Wörterbuch-solange die keys und Werte übereinstimmt. (Wörterbuch keine order in Python)
Aber die Reihenfolge ist wichtig in der Liste; Sortierung lösen das problem für die Listen.
Obigen Beispiel wird für die Arbeit der JSON in Frage. Für die Allgemeine Lösung, siehe Null-Piräus Antwort.
InformationsquelleAutor der Antwort falsetru