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

JavaScript Discussion :

JSON.parse et guillemets


Sujet :

JavaScript

  1. #1
    Membre �prouv� Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, C�tes d'Armor (Bretagne)

    Informations professionnelles :
    Activit� : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par d�faut JSON.parse et guillemets
    Bonsoir � Tous,

    C�t� PHP :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    $data[] = array('text'=>$text,'value'=>"toto");
    echo json_encode($data);
    C�t� JS, avec :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    var tab = JSON.stringify(obj);
    var tabok = JSON.parse(tab);
    J'obtiens dans la console

    [{"text":"Principale","value":"toto"},{"text":"Seconde","value":"toto"}]

    Mais pour les besoins de mon script je voudrais obtenir :

    [{text:"Principale",value:"toto"},{text:"Seconde",value:"toto"}]

    Donc que les cl�s n'aient pas de guillemets.
    Comment faire ?

  2. #2
    R�dacteur/Mod�rateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par d�faut
    Au format JSON, les cl�s auront toujours des guillemets. Une fois pars� en JavaScript, elles n'en auront jamais. Donc aucune inqui�tude � avoir.

  3. #3
    Membre �prouv� Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, C�tes d'Armor (Bretagne)

    Informations professionnelles :
    Activit� : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par d�faut
    Au format JSON, les cl�s auront toujours des guillemets. Une fois pars� en JavaScript, elles n'en auront jamais. Donc aucune inqui�tude � avoir.
    Ce qui revient � dire ?

  4. #4
    Membre �prouv� Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, C�tes d'Armor (Bretagne)

    Informations professionnelles :
    Activit� : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par d�faut
    Il faut pas utiliser json_encode c�t� php ?
    Il faut pr�senter le tableau php autrement ?
    Il faut le r�cup�rer en js avec json.stringify ou parse ou les deux ou pas ?
    Je dois avoir ce format des cl�s sans quotes pour ajouter une liste � tinyMce.
    Et je sais pas trop vers quoi chercher.

  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 : 75
    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
    Citation Envoy� par renaud26 Voir le message
    [...] Donc que les cl�s n'aient pas de guillemets. [...]
    Citation Envoy� par SylvainPV Voir le message
    [...] Une fois pars� en JavaScript, elles n'en auront jamais. [...]
    Je dirais plut�t qu'elles peuvent ne pas en avoir lorsque la cl� est form�e par un seul mot.

    Personnellement, je suis partisan d'en mettre syst�matiquement puisque c'est du texte. Je n'ai jamais rencontr� un probl�me � cause des guillemets.

    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.)

  6. #6
    R�dacteur/Mod�rateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par d�faut
    Le seul moyen d'avoir des cl�s d'objet JS entour�es de guillemets est d'utiliser un autre type de guillemet, simple ou backtick: o = { '"test"': 42 }
    Il faut vraiment vouloir le faire expr�s, surtout si �a vient d'un JSON (o� le double guillemet est obligatoire pour les cl�s). Mais oui, ne jamais dire jamais, surtout en PHP

    Tu es s�r que ces guillemets sont bien pr�sents dans les cl�s elles-m�mes ? Ne te laisse pas abuser par le debugger, dans ton exemple les objets sont strictement �quivalents.

  7. #7
    Membre �prouv� Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, C�tes d'Armor (Bretagne)

    Informations professionnelles :
    Activit� : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par d�faut
    Bonjour � Tous,

    Apr�s avoir tourn� le probl�me en tous les sens, le probl�me n'est peut-�tre pas d� aux guillemets...
    Mon but est d'alimenter une listBox dans tinyMce. J'ai cr�e une petite fonction qui est cens�e r�cup�rer et retourner la chaine attendue par tiny.

    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
    20
     
    			function afficheListe(){
    				var tab = "";
    				$.ajax({
    				   type:"POST",
    				   async: false,
    				   url:  $url,
    				   data: "id=$id",
    				   success: function(msg){
    					 if(msg){
     
    						tab = JSON.parse(JSON.stringify(msg));
     
     
    					 }
    				   }
     
    				 });
    			return tab;
    			}
    Le log de cette fonction affiche : [{"text ":"Principale"," value ":"toto"},{"text ":"seconde"," value ":"tata"}]

    Ensuite dans le setup de tiny :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    							setup:function (editor) {
    								editor.addButton('listeSignatures', {
    								  type: 'listbox',
    								  text: 'Vos signatures',
    								  icon: false,
    								  onselect: function (e) {
    									editor.insertContent(this.value());
    								  },
    								  values: afficheListe(), ////ICI JEVOUDRAIS BIEN LA CHAINE DE MON AJAX
     
    								});
    							  },
    Sauf que lorsque je clique sur la liste de l'�diteur pour voir si les options sont bien l�, j'obtiens :
    Uncaught Error: Could not find control by type: [{"text ":"principale"," value ":"toto"},{"text ":"seconde"," value ":"tata"}]

    Et si je mets directement values: [{ "text":"principale","value":"toto" },{ "text":"seconde","value":"tata" }], � la place de la fonction
    Ca fonctionne !
    La seule diff�rence r�side dans l'espace entre { et "text".
    Mais il faut dire que c'est interpr�t� dans un template smarty o� les { } sont des balises...

  8. #8
    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 : 75
    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
    Citation Envoy� par renaud26 Voir le message
    Le log de cette fonction affiche : [{"text ":"Principale"," value ":"toto"},{"text ":"seconde"," value ":"tata"}
    Il y a un probl�me � la g�n�ration du JSON, des espaces inutiles dans les cl�s !

    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.)

  9. #9
    Membre �prouv� Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, C�tes d'Armor (Bretagne)

    Informations professionnelles :
    Activit� : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par d�faut
    Non, j'ai du me gourer en saisissant le post mais dans la console:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    [{"text":"Principale","value":"toto"},{"text":"Seconde","value":"tata"}]
    et si je saisis �a en "dur" :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    values: [{ "text":"principale","value":"toto" },{ "text":"seconde","value":"tata" }],
    Ca le fait bien.

    Il faudrait au contraire que j'arrive � g�n�rer un espace entre { et "test" ainsi qu'en fin de chaine : "tata" }

  10. #10
    Expert confirm�
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 61
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : Urbaniste
    Secteur : Sant�

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par d�faut
    JSON est un moyen de transport.
    peut importe comment il code l'information.
    Si tu utilise JSON.stringify JSON.Parse json_encode json_decode ces outils te garantissent que ce que tu encode sera d�cod� � l'identique.

    il pourrait transporter en binaire avec des caract�res �sot�rique ou avec n'importe quoi d'autre la seul chose qui importe c'est que la structure que tu encode sera celle que tu obtiendra au d�codage
    que json_encode ajoute ou pas des " des espaces ou quoi que ce soit d'autre n'a aucun importance

    si tu met toto dans ta clef tu auras toto dans ta clef et que pour le transport JSON ait ou pas ajout� de " ne change rien. si tu a une map JSON va l'encoder {"clef":"valeur"} et qu'il y ait 1 2 20 ou googol espaces entre { " ne changera rien tu aura � l'arriv� un map identique.

    il ne sert absolument � vouloir modifier la fa�on don JSON encode les objets.

    mais surtout il est compl�tement absurde d'encoder 2 fois un objet pour le d�coder 1 fois
    Code php : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    $data[] = array('text'=>$text,'value'=>"toto");
    echo json_encode($data);
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    tab = JSON.parse(JSON.stringify(msg));
    voici ce que tu fais
    Code php : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    $data[] = array('text'=>$text,'value'=>"toto");
    echo json_encode($data);// premier encodage
    =>
    Code text : S�lectionner tout - Visualiser dans une fen�tre � part
    [{"text":"Principale","value":"toto"},{"text":"Seconde","value":"tata"}]
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    JSON.stringify(msg)
    //deuxième encodage
    o� msg est la string pr�c�dente =>
    Code text : S�lectionner tout - Visualiser dans une fen�tre � part
    "[{\"text\":\"Principale\",\"value\":\"toto\"},{\"text\":\"Seconde\",\"value\":\"tata\"}]"
    ce qui est la repr�sentation JSON de ta chaine de caract�res.
    puis
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    tab = JSON.parse(...);//premier decodage
    =>
    Code text : S�lectionner tout - Visualiser dans une fen�tre � part
    [{"text":"Principale","value":"toto"},{"text":"Seconde","value":"tata"}]

    tu obtiens une chaine est non pas la structure de donn�e de d�part
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    values: afficheListe(), ////ICI JE VOUDRAIS BIEN LA CHAINE DE MON AJAX
    ceci n'a absolument aucun sens ici ce dont tu as besoin c'est la structure de donn�e et non la string
    Code php : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    $data[] = array('text'=>$text,'value'=>"toto");
    echo json_encode($data);
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    values: afficheListe(), ////ICI le tableau de données
    //=>
    [
      {
        text:"Principale",
        value:"toto"
      },
      {
        text:"Seconde",
        value:"tata"
      }
    ]

    pour finir je dirais que data: "id=$id", est des plus �trange je ne vois pas ce qu'il fait l�. �a sent tr�s mauvais le m�lange de js et php.
    A+JYT

  11. #11
    Mod�rateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut
    Bonjour,
    ton return tab est en dehors de la fonction succes :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var tab = '';
    $.ajax({
        type: 'POST',
        async: false,
        url: $url,
        data: 'id=$id',
        success: function (msg) {
            if (msg) {
                tab = JSON.parse(JSON.stringify(msg));
            }
        }
    });
    return tab;
    de plus pourquoi ne pas utiliser le dataType:"json" ?

  12. #12
    Expert confirm�
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 61
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : Urbaniste
    Secteur : Sant�

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par d�faut
    Il fait un appel synchrone

  13. #13
    Mod�rateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut
    ah ! oui fl�te, crotte, kk !

    par contre il faut r�cup�rer tab[0], ou boucler sur le tableau.

  14. #14
    Membre �prouv� Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, C�tes d'Armor (Bretagne)

    Informations professionnelles :
    Activit� : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par d�faut
    Merci � vous, merci � toi sekaijin pour tes lumineuses explications.
    Effectivement je m'embrouillais grave avec json_encode, JSON.parse et stringify.
    Note pour data: "id=$id", c'est du arrang� pour ce post. En r�alit� les datas pass�s � php sont :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    data: "id_employee={$current_employee->id}",
    Et donc voici la fonction js qui va bien, gr�ce � vous :

    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
    20
     
    			function afficheListe(){
    				var tab = "";
    				$.ajax({
    				   type:"POST",
    				   async: false,
     
    				   url:  "json.php",
    				   data: "id_employee={$current_employee->id}",
    				   datatype: "json",
    				   success: function(mydata){
     
    						tab = JSON.parse(mydata);
     
    				   }
     
     
    				 });
    			return tab;
    			}
    Ensuite le values : afficheListe() affiche bien les options r�cup�r�es.
    Encore merci et bon week-end !

  15. #15
    Mod�rateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut
    Attention, pas datatype: "json" mais dataType: "json" ce qui t'�vites le JSON.parse(mydata).

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 6
    Dernier message: 06/05/2012, 17h41
  2. Tri par cl� lors d'un JSON.parse
    Par legentil dans le forum jQuery
    R�ponses: 4
    Dernier message: 11/02/2012, 20h56
  3. JSON Parsing en JSONArray sur android
    Par S.Jihad dans le forum Android
    R�ponses: 7
    Dernier message: 08/05/2011, 13h49
  4. Jersey Json parse
    Par allouli_raf dans le forum Format d'�change (XML, JSON...)
    R�ponses: 0
    Dernier message: 20/04/2011, 15h32
  5. JSON parse et stringify
    Par sekaijin dans le forum G�n�ral JavaScript
    R�ponses: 2
    Dernier message: 05/11/2009, 15h36

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