Wie der Titel andeutet, treffe ich jetzt eine Frage, dass, wenn ich die JSON-Zeichenkette als Wörterbuch lese, sich die Wörterbuchreihenfolge von der JSON-Zeichenkette unterscheidet Auftrag. Kann jemand es lösen? Vielleicht wird mir jemand sagen, dass das Wörterbuch unordentlich ist, aber unser Projekt muss das Wörterbuch nach Originalreihenfolge sortieren.Wie man die ursprüngliche Reihenfolge beim Lesen der JSON-Zeichenkette über die IOS-Entwicklung hält
Wie man die ursprüngliche Reihenfolge beim Lesen der JSON-Zeichenkette über die IOS-Entwicklung hält
Antwort
Ein JSON-Objekt ist in der JSON-Spezifikation als ungeordnete Auflistung definiert.
Ein Objekt ist ein ungeordneter Satz von Name/Wert-Paaren. (http://json.org/)
Hier sind einige mögliche Lösungen:
- Ändern Sie das JSON-Objekt in ein Array von Objekten. Wenn Sie den Server steuern, ist dies bei weitem die beste Option. Wenn die Reihenfolge wichtig ist, ist das Array die richtige Wahl.
- Senden Sie die Bestellung zusammen mit dem JSON. Sie können ein Array der Schlüssel auch im JSON enthalten. Auch hierfür müssten Sie die Kontrolle über den Server haben.
- Sortieren Sie die Schlüssel, nachdem Sie sie erhalten haben. Dies kann nur funktionieren, wenn die gewünschte Reihenfolge von den Schlüsseln abgeleitet werden kann. Zum Beispiel, wenn die Schlüssel alphabetisch oder Zahlen sind. Wenn Sie die Schlüssel steuern (auch wenn Sie nicht die gesamte Serverantwort steuern), können Sie dies ändern, indem Sie die Schlüssel so ändern, dass sie für Sie geeignet sind (z. B. die Schlüssel aus ["Stores", "locations") "] to [" 0_stores "," 1_locations "]. Dies funktioniert auch, wenn Sie alle möglichen Schlüssel und ihre Reihenfolge kennen.
Bestellen Sie die Schlüssel nach dem Speicherort im JSON-Wörterbuch.Wenn die Schlüssel im JSON sind garantiert irgendwo sonst in der JSON nicht angezeigt (dh es gibt keine beliebigen Textfeld in der JSON ist), dann können Sie alle Dictionary-Schlüssel von der Suche sortiert bekommen, wo sie in der JSON-String angezeigt:
NSArray* sortedKeys = [[dictionary allKeys] sortedArrayUsingComparator:^NSComparisonResult(NSString* key1, NSString* key2) { NSInteger location1 = [jsonString rangeOfString:key1].location; NSInteger location2 = [jsonString rangeOfString:key2].location; return [@(location1) compare:@(location2)]; }];
Wenn keine dieser Optionen für Sie funktioniert, müssen Sie einen eigenen JSON-Parser finden oder erstellen, der die Reihenfolge berücksichtigt. Ich denke, es wird schwer sein, eine solche Bibliothek zu finden, da dies ausdrücklich gegen die JSON-Spezifikation verstoßen würde. Ich empfehle diese Option nicht.
Danke .Ich benutzte Ihre 4., es ist nützlich, obwohl es vielleicht nicht der beste Weg ist, bekomme ich alle Schlüssel und bekomme sie Standort sie sortiert ich nach dem Standort. Es ist wirklich nützlich. –
- 1. Wie erhält man die ursprüngliche Reihenfolge der Eigenwerte mit Eigen?
- 2. Hält HashSet die Reihenfolge zwischen Aufzählungen?
- 3. Hält JsonOutput.toJson in groovy die Reihenfolge der Eigenschaften?
- 4. Erhalten Sie die ursprüngliche Reihenfolge der geladenen Datei in SQL
- 5. Hält Hibernate HQL Select die Reihenfolge der Tabelle?
- 6. r Wiederholungssequenz Zahlenfolge, wobei die Reihenfolge der Sequenz hält
- 7. Wie normalisiert man die Reihenfolge der Zahlen?
- 8. Wie man die Reihenfolge der Histogrammbalken ändert
- 9. Wie man die Taste gedrückt hält
- 10. Wie kann die ursprüngliche Methode
- 11. Alter die Reihenfolge der Textauswahl über Elemente
- 12. Python 3: behält Pool die ursprüngliche Reihenfolge der an die Karte übergebenen Daten?
- 13. Wie erkennt man Abfrage, die die Sperre in Postgres hält?
- 14. behält PLINQ die ursprüngliche Reihenfolge in einer Sequenz?
- 15. Die Reihenfolge der Geschäftsräume
- 16. wie man in chronologischer Reihenfolge rebase und commits hält?
- 17. Geschachtelt für die Schleife innen, während man die Runden des Spielers in Reihenfolge hält
- 18. Wie liest man die Zeilen der Eingabe in beliebiger Reihenfolge?
- 19. Liste der Tupel, die die Reihenfolge wechseln
- 20. Beweise über Funktionen, die von der Reihenfolge ihrer Alternativen abhängen
- 21. Wie ändert man die Reihenfolge der Schaltflächen in der Taskleiste?
- 22. Wie speichert man die Reihenfolge der Zeilen in der Tabellenansicht?
- 23. Wie ändert man die Reihenfolge der Spalten in der Gridview?
- 24. die XML-Datenbank hält
- 25. Wie spezifiziert man die Reihenfolge der CSS Klassen?
- 26. Wie man die Reihenfolge der Elemente in einem Tupel ignoriert
- 27. Wie würde ich gehen über das Lesen einer TXT-Datei dann die Reihenfolge der Daten in absteigender Reihenfolge
- 28. Wie mischt man mehrere Eingänge und hält die Synchronisation aufrecht?
- 29. FFmpeg: Wie steuert man die Konsolenausgabe beim Lesen von RTSP?
- 30. Wie ändert man die Reihenfolge von OrderedDict?
Wenn eine bestimmte Reihenfolge obligatorisch ist, ist ein Wörterbuch der falsche Sammlertyp. – vadian
Wenn Sie geordnete Daten benötigen, macht die Verwendung von Dictionary keinen Sinn. Wenn Sie es dennoch tun möchten, müssen Sie ein benutzerdefiniertes Wörterbuch erstellen. Obwohl nicht ideal ratsam, überprüfen Sie diesen Link - http://www.cocoaithloth.com/2008/12/ordereddictionary-subclassing-cocoa.html Andernfalls können Sie die Reihenfolge der Schlüssel in einem Array speichern und dann die Daten aus dem Wörterbuch erhalten in der Reihenfolge der Anordnung, wenn absolut notwendig. –
Sie sollten jedes JSON-Dict in Array speichern, um es bestellt zu bekommen –