2017-07-26 2 views
0

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

+3

Wenn eine bestimmte Reihenfolge obligatorisch ist, ist ein Wörterbuch der falsche Sammlertyp. – vadian

+0

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. –

+0

Sie sollten jedes JSON-Dict in Array speichern, um es bestellt zu bekommen –

Antwort

0

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:

  1. Ä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.
  2. 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.
  3. 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.
  4. 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)]; 
    }]; 
    
  5. 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.

+0

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. –

Verwandte Themen