[RESOLU] [SWIFT] Comment ordonner du JSON ?

InsouInsou Membre
juillet 2016 modifié dans API UIKit #1

Bonjour,


 


Je me retrouve dans un cas où je dois ordonner du json, par défaut, le json n'est pas ordonné..


 


Voila le json que je reçois :



{
"Error": {
"Message": "",
"Code": 0
},
"Token": "xxx",
"Data": {
"Groupes" : {
"546" : {
"Id" : "546"
"Titre" : "blablabla"
"Ordre" : 1
}
},
"1265" : {
"Id" : "1265"
"Titre" : "blablabla"
"Ordre" : 2
}
},
"9976" : {
"Id" : "9976"
"Titre" : "blablabla"
"Ordre" : 3
}
}
}

J'utilise SwiftyJson pour manipuler le json et une fois que je crée mon objet SwiftyJson via mon json, je perds l'ordre (ce qui est normal vu que le json n'est pas ordonné)..


 


Du coup, avez-vous une solution / une idée afin de garder l'ordre ?


Comment vous faite pour garder un ordre ?


 


Merci de votre aide :)


Mots clés:

Réponses

  • CéroceCéroce Membre, Modérateur
    Je n'ai pas compris la question. Le format JSON est ordonné " je veux dire, par principe.
    Tu veux dire que tu reçois un JSON que tu souhaites trier selon un critère ?
  • Personnellement, je ne vois pas d'ordre.


    Tu as des dictionnaires qui fonctionnent par clé et non pas par index contrairement aux arrays.


    J'ai cru voir qu'apparemment avec Swift on peut tout de même ordonner des dictionnaires, mais de mon point vue, ce n'est absolument pas fait pour ça, ça veut dire qu'il y a un soucis au niveau du modèle.


  • Céroce : ouai voilà , c'est ça, je souhaite trier mon json selon un critère :/


    Larme : ouai je vois ce que tu veux dire quand tu dis qu'il n'y a pas d'ordre, c'est qu'un dictionnaire avec des clés..

    Quand je le reçois de mon php, il est dans le bon "ordre" mais une fois traité via SwiftyJson, c'est normal qu'il ne le soit plus (il n'a rien pour se référer a cet ordre, d'où le fait que ce ne soit pas fait pour ça..)


    As-tu un lien / un exemple pour ordonner du json ? :)

    Quand tu dis "un soucis au niveau du modèle", c'est que je ne devrais pas utiliser un dictionnaire mais autre chose ?
  • HorusHorus Membre
    juillet 2016 modifié #5

    Salut,


     


    Tu peux “trier" ton JSON comme cela :



    //Dans l'idée tu mets dans un tableau les groupes par exemple en utilisant une structure : 
    let items = json["Data"]["Groupes"].map({
                        Groupes(id: $0.1["id"].intValue,titre: $0.1["Titre"].stringValue [etc ...])
                    })
    items.sortInPlace({$0.0.id > $0.1.id})

    Le code est là  uniquement pour te donner une idée du traitement à  faire :)


  • Si l'ordre auquel tu te réfères correspond à  l'ordre des clés récupère simplement toutes les clés et fait un tri selon ton critère. Tu pourras ainsi accéder aux données de ton dico dans l'ordre que tu veux avec une boucle sur ton tableau de clé.


     


    Sinon d'une manière générale si des données sont stockés dans un dictionnaire c'est que l'ordre importe peu, sinon il faut utiliser un tableau.


  • Merci à  vous 2 pour vos pistes..


     


    En cherchant un peu dans cette direction, je suis tombé sur .sort()


     


    Du coup, j'ai fais comme ça : 



    let tabTrier = recupJSON["Data","Groupes"].sort{
    return ($0.1["Ordre"].intValue) < ($1.1["Ordre"].intValue)
    }

    et je me retrouve bien avec mon json, trier sur l'ordre, donc nickel !


     


    Cette solution à  l'air plus simple mais personne ne l'a proposée.. il y a une raison à  cette utilisation que je ne connais pas encore ? ^^


  • Je n'y vois aucun inconvénient simplement, je préfère utiliser : "sortInPlace" afin de ne pas avoir à  allouer une seconde variable sachant que la 1er ne sera pas utilisée (si c'est le cas bien sur ^^) 


Connectez-vous ou Inscrivez-vous pour répondre.