2010-12-06 12 views
0

J'ai actuellement une chaîne JSON ordonnée qui est passée dans mon application iPhone, qui est ensuite analysée en utilisant le framework JSON.JSON-Framework Analyser les données dans un ordre étrange

Les données sont les suivantes:

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

Cependant quand il parse que, il jette un ordre bizarre.

Division 2 
Division 1 
Championship 
"Division 3" 
Premiership 

Ce que je suis arrivé en appelant: NSLog(@"%@",[dictionaryValue allKeys]);.

Quelqu'un at-il déjà vécu cela? Une idée de ce qu'il faut faire pour le trier à nouveau?

MISE À JOUR ::

L'ONU-analysable raccourci JSON est ici:

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

Pour autant que je peux dire, c'est une paire clé/valeur, il devrait donc être analysé dans le même commande. Par exemple aller à http://json.parser.online.fr/ et coller cela dans l'analyser dans le bon ordre. Cependant, JSON-Framework ne l'analyse pas de la même façon, il l'analyse dans un ordre étrange sans réel tri.

Répondre

0

Oui, j'ai déjà vu ça.

Cela vous pose un problème? il ressemble à un dictionnaire (claveté) .. donc je suppose que votre application accède simplement aux éléments requis par sa clé. Je crois qu'un format de tableau JSON maintiendrait l'ordre.

EDIT

Ok, donc vous devez maintenir l'ordre ... mais de ce que vous dites, il semble que la clé n'a pas d'importance.

Êtes-vous en contrôle de la création de la chaîne JSON? Si oui, pourriez-vous présenter les données comme ceci:

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

J'ai mis dans le leagueName juste pour information ...qui savent ce que vous pourriez avoir besoin pour quelque chose :)

Bonne chance

+0

Hey, Le problème est que je suis alors en utilisant une boucle ForEach pour obtenir les clés, puis en itérant sur les enfants ci-dessous. Il sorte de besoin que cet ordre soit le même sinon il les sort dans le mauvais ordre –

+0

Merci! On dirait que ça pourrait marcher, je vais demander aux gars de l'essayer demain. –

+0

Hey Danny, Comment êtes-vous montés? Est-ce que vous utilisez un tableau à la place d'un dictionnaire qui fonctionne pour vous? – MDMonty

4

Les champs d'objet JSON n'ont pas d'ordre défini. Si vous voulez paires clé/valeur dans un ordre défini, il y a essentiellement deux options:

  1. Un tableau d'objets champ unique:

    [{"Premiership": array[6]}, 
    {"Championship": array[6]}, 
    {"Division 1": array[6]}, 
    {"Division 2": array[6]}, 
    {"Division 3": array[6]}] 
    
  2. Un tableau de paires clé/valeur:

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

Sidenote: Je suis à moitié deviner que la relation entre les échantillons et les données JSON. Je ne sais pas ce que font object et array[6].

+0

Je ne suis pas tout à fait sûr de ce que vous entendez par là, la configuration semble bien sa juste la façon dont le JSON-cadre parse il ruine l'ordre de son envoyé. –

+1

Le point entier de la clé/valeur n'a pas besoin de connaître l'index pour trouver des éléments dans un tableau. Vous pouvez obtenir les données hors service en utilisant les noms de clés. Il n'y a jamais de garantie que les données resteront dans un ordre spécifique, sauf dans un tableau indexé. – ExitToShell

+0

Vous pouvez toujours le commander quand la commande devient importante, comme l'envoyer quelque part, en se référant aux touches dans l'ordre. Alors que dans le dictionnaire, il n'y a pas d'ordre, l'équivalent effectif d'être dans un ordre aléatoire. –