2010-12-06 6 views
0

Ich habe derzeit eine geordnete JSON-Zeichenfolge, die an meine iPhone-App übergeben wird, die dann mit dem JSON-Framework analysiert wird.JSON-Framework Parsing von Daten in einer seltsamen Reihenfolge

Die Daten sind wie folgt:

"league_table": object{ 
"Premiership": array[6], 
"Championship": array[6], 
"Division 1": array[6], 
"Division 2": array[6], 
"Division 3": array[6] 
} 

jedoch, wenn es parst, dass es wirft eine seltsame Reihenfolge.

Division 2 
Division 1 
Championship 
"Division 3" 
Premiership 

Was ich bekam, indem ich anrief: NSLog(@"%@",[dictionaryValue allKeys]);.

Hat jemand das schon mal erlebt? Irgendeine Idee, was zu tun ist, um es wieder zu sortieren?

UPDATE ::

Der verkürzte UN-Parsed JSON ist hier:

{"league_table": 
{ 
"Premiership":[], 
"Championship":[], 
"Division 1":[], 
"Division 2":[], 
"Division 3":[]} 
} 

Soweit ich sagen kann, ist dies ein Schlüssel/Wert-Paar ist, so sollte es in den gleichen analysiert werden Auftrag. Zum Beispiel gehen Sie zu http://json.parser.online.fr/ und einfügen, dass in wird es in der richtigen Reihenfolge zu analysieren. Das JSON-Framework analysiert es jedoch nicht gleich, es parst es in einer seltsamen Reihenfolge, ohne dass eine echte Sortierung stattfindet.

Antwort

0

Ja, das habe ich schon mal gesehen.

Haben Sie ein Problem? es sieht aus wie ein Dictionary (keyed) .. also ich denke, Ihre Anwendung greift nur auf die erforderlichen Elemente mit ihrem Schlüssel zu.

Ich glaube, ein JSON-Array-Format würde die Reihenfolge beibehalten.

EDIT

Ok, so müssen Sie die Ordnung aufrecht zu erhalten ..., aber von dem, was Sie sagen, es sieht aus wie der Schlüssel ist nicht wichtig.

Steuern Sie die Erstellung der JSON-Zeichenfolge? Wenn ja, könnten Sie die Daten wie folgt darstellen:

[ 
{ 
"leagueName":"Premiership", 
"leagueLines":[...] 
}, 
{ 
"leagueName":"Championship", 
"leagueLines":[...] 
}, 
{ 
"leagueName":"League One", 
"leagueLines":[] 
}, 
... etc .... 
] 

Ich habe in der Liga in nur für Informationen ...die wissen, das man es für etwas brauchen könnte :)

Good Luck

+0

Hey, Das Problem ist, ich bin dann mit einer ForEach-Schleife, um die Schlüssel aus dann über die Kinder darunter zu iterieren. Es muss so bestellt werden, um das gleiche zu sein, sonst gibt es sie in der falschen Reihenfolge aus –

+0

Danke! Das sieht so aus, als ob es funktionieren könnte, ich werde die Jungs dazu bringen, das morgen auszuprobieren. –

+0

Hey Danny, Wie bist du gekommen? Verwendet ein Array anstelle eines Wörterbuchs für Sie? – MDMonty

4

JSON-Objektfelder haben keine definierte Reihenfolge. Wenn Sie Schlüssel/Wert-Paare in einer definierten Reihenfolge wollen, gibt es grundsätzlich zwei Möglichkeiten:

  1. Ein Array von Einfeld-Objekte:

    [{"Premiership": array[6]}, 
    {"Championship": array[6]}, 
    {"Division 1": array[6]}, 
    {"Division 2": array[6]}, 
    {"Division 3": array[6]}] 
    
  2. Ein Array von Schlüssel/Wert-Paare:

    [["Premiership", array[6]], 
    ["Championship", array[6]], 
    ["Division 1", array[6]], 
    ["Division 2", array[6]], 
    ["Division 3", array[6]]] 
    

Nebenbei bemerkt: ich bin halb zu raten, dass die Beziehung zwischen den Beispieldaten und JSON. Ich weiß nicht, was object und array[6] dort tun.

+0

Im nicht ganz sicher, was Sie damit meinen, das Setup seiner parst nur die Art und Weise der JSON-Framework-Fein sieht es den Auftrag seine geschickt in Schutt und Asche. –

+1

Der ganze Punkt von Schlüssel/Wert muss nicht den Index kennen, um Elemente in einem Array zu finden. Sie können die Daten außerhalb der Reihenfolge abrufen, indem Sie Schlüsselnamen verwenden. Es gibt niemals eine Garantie, dass die Daten in einer bestimmten Reihenfolge bleiben, es sei denn, sie befinden sich in einem indizierten Array. – ExitToShell

+0

Sie können es immer bestellen, wenn die Bestellung wichtig wird, z. B. indem Sie sie irgendwohin senden, indem Sie auf die Schlüssel in der Reihenfolge verweisen. Im Wörterbuch gibt es jedoch keine Reihenfolge, das effektive Äquivalent, in zufälliger Reihenfolge zu sein. –