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 confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    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
    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
    }"

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    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 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 202
    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
    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" );

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

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, 22h52
  2. [ XML ][ XSL ] tri par date
    Par zozolh2 dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/08/2004, 10h19
  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, 22h34
  4. Tri par ordre alphabétique
    Par orus8 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 17/04/2003, 19h27
  5. Tri par fusion d'un tableau
    Par Mailgifson dans le forum C
    Réponses: 5
    Dernier message: 12/12/2002, 14h53

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