IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Tri par clé lors d'un JSON.parse


Sujet :

jQuery

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    Points : 110
    Points
    110
    Par défaut Tri par clé lors d'un JSON.parse
    Bonjour à tous!

    Je code un site en JQuery/JSON, et j'ai un souci sous chrome !

    En php ,je récupère une liste de groupes de musique dans ma base de données, triée par nom de groupe. Je retourne ensuite ça au format JSON à ma fonction javascript.

    En utilisant le débugger de chrome, je peux voir que ma structure retournée par ma fonction php est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "{"5":"10 cents for a beer","1":"Apatricid","8":"Askatasuna","6":"Chepa","11":"Kirkipete","9":"Les Enrag\u00e9s du Cerveau","3":"Les Trous Duck","7":"Nasty Froggys","10":"The Sexopath","12":"Tirtap Crew","succes":true}"
    Malheureusement un tri sur les clé est fait lorsque je fait mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    retour = JSON.parse(data);
    Et je me retrouve donc avec comme valeur dans retour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    1: "Apatricid"
    3: "Les Trous Duck"
    5: "10 cents for a beer"
    6: "Chepa"
    7: "Nasty Froggys"
    8: "Askatasuna"
    9: "Les Enragés du Cerveau"
    10: "The Sexopath"
    11: "Kirkipete"
    12: "Tirtap Crew"
    succes: true
    Vu que ces enregistrements sont destinés à renseigner une liste déroulante, mes enregistrements se retrouvent dans le désordre dans ma liste...

    pour info, je parcours mes enregistrements en utilisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for(var key in retour){
    A noter que sous firefox par contre, l'ordre est conservé.

    Quelqu'un sait comment je pourrai retrouver mes données dans le bon ordre??

    Merci à vous !

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 937
    Points
    22 937
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    J'ignorais cette particularité de Chrome qui s'amuse à remettre les clés numériques d'un objet dans "son ordre" ! C'est bon à savoir !

    La solution la plus simple c'est de toujours utiliser une clé alphanumérique (minimum un caractère alphabétique dans la clé).

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    "{
    	"a5":"10 cents for a beer",
    	"a1":"Apatricid",
    	"a8":"Askatasuna",
    	"a6":"Chepa",
    	"a11":"Kirkipete",
    	"a9":"Les Enrag\u00e9s du Cerveau",
    	"a3":"Les Trous Duck",
    	"a7":"Nasty Froggys",
    	"a10":"The Sexopath",
    	"a12":"Tirtap Crew",
    	"succes":true
    }"

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    Points : 110
    Points
    110
    Par défaut
    Merci pour ta réponse !

    Le problème c'est que mon ID doit rester numérique (il est géré par mysql avec un auto-increment) !

    Après je peux toujours essayer d'ajouter un préfixe à mon ID avant de retourner les résultats et de le retirer ensuite en javascript, mais ça me paraît pas très élégant comme solution : )

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 153
    Points : 44 955
    Points
    44 955
    Par défaut
    Bonjour,
    effectivement Chrome mets de l'ordre
    Quelqu'un sait comment je pourrai retrouver mes données dans le bon ordre??
    as tu besoin de l'ordre pour récupérer les datas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var data = '{"5":"10 cents for a beer","1":"Apatricid","8":"Askatasuna","6":"Chepa","11":"Kirkipete","9":"Les Enrag\u00e9s du Cerveau","3":"Les Trous Duck","7":"Nasty Froggys","10":"The Sexopath","12":"Tirtap Crew","succes":true}';
    var retour = JSON.parse(data);
    alert( retour['5']);
    affiche quoiqu'il arrive le bon résultat.

  5. #5
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 937
    Points
    22 937
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    Pour obtenir une liste de (clé, valeur) dans un ordre précis il est préférable d'utiliser un array : [ [ key1, value1], [key2, value2], ...].

    [Edit] Même avec des clés alphabétiques, Google s'amuse à faire "son" tri.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    var d = {
    	"z" : "10 cents for a beer",
    	"a" : "Apatricid",
    	"c" : "Askatasuna",
    	"e" : "Chepa",
    	"f" : "Kirkipete",
    	"y" : "Les Enrag\u00e9s du Cerveau",
    	"b" : "Les Trous Duck",
    	"w" : "Nasty Froggys",
    	"h" : "The Sexopath",
    	"g" : "Tirtap Crew",
    	"succes":true
    };
     
    var dj = JSON.stringify( d );
     
    var nd = JSON.parse( dj );
     
    console.log( d, "\n", dj, "\n", nd);
    Mais contrairement aux clés numériques, l'affichage dans la page web reste dans l'ordre initial.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var tab = $.map( nd, function( value, key ){
    	return [ key, value ];
    });
     
    $("<p>" + tab.join(", ") + "</p>").appendTo( "section.conteneur" );

Discussions similaires

  1. problème de requète lors d'un tri par combobox
    Par inforlab dans le forum Windows Forms
    Réponses: 1
    Dernier message: 02/12/2008, 23h52
  2. [ XML ][ XSL ] tri par date
    Par zozolh2 dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/08/2004, 11h19
  3. [LG]Tri par insertion dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 4
    Dernier message: 18/12/2003, 23h34
  4. Tri par ordre alphabétique
    Par orus8 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 17/04/2003, 20h27
  5. Tri par fusion d'un tableau
    Par Mailgifson dans le forum C
    Réponses: 5
    Dernier message: 12/12/2002, 15h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo