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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 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
    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 : 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
    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.)

+ 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