105 votes

Comment créer une chaîne JSON en JavaScript ?

window.onload = function(){
    var obj = '{
            "name" : "Raj",
            "age"  : 32,
            "married" : false
            }';

    var val = eval('(' + obj + ')');
    alert( "name : " + val.name + "\n" +
           "age  : " + val.age  + "\n" +
           "married : " + val.married );

}

Dans un code comme celui-ci, j'essaie de créer une chaîne JSON juste pour m'amuser. Il jette l'erreur, mais si je mets tout le nom, l'âge, marié dans une seule ligne (ligne 2) il ne fait pas. Quel est le problème ?

2 votes

290voto

Akhil Sekharan Points 6018

La façon dont je le fais est :

   var obj = new Object();
   obj.name = "Raj";
   obj.age  = 32;
   obj.married = false;
   var jsonString= JSON.stringify(obj);

Je suppose que cette méthode permet de réduire les risques d'erreur.

0 votes

À quoi ressemblerait le code si vous vouliez donner de la profondeur à l'arbre ? Par exemple, pour le nom, je voudrais donner nom.prénom et nom.nom de famille. Dois-je définir name comme var ?

88voto

bardiir Points 5225

Avertissement : Ce n'est pas une réponse à suivre pour la meilleure façon de créer JSON en JavaScript lui-même. Cette réponse aborde principalement la question "quel est le problème ?" ou POURQUOI le code ci-dessus ne fonctionne pas - qui est une mauvaise tentative de concaténation de chaîne en JavaScript et ne s'attaque pas à la raison pour laquelle la concaténation de chaîne est une très mauvaise façon de créer une chaîne JSON en premier lieu.

Voir ici pour la meilleure façon de créer JSON : https://stackoverflow.com/a/13488998/1127761

Lisez cette réponse pour comprendre pourquoi l'exemple de code ci-dessus ne fonctionne pas.

Javascript ne gère pas les chaînes de caractères sur plusieurs lignes.

Vous devrez les concaténer :

var obj = '{'
       +'"name" : "Raj",'
       +'"age"  : 32,'
       +'"married" : false'
       +'}';

Vous pouvez également utiliser des littéraux de modèle dans ES6 et les versions supérieures : ( Voir ici pour la documentation )

var obj = `{
           "name" : "Raj",
           "age" : 32,
           "married" : false,
           }`;

13 votes

Ou bien mettez un \ à la fin de chaque ligne dans le littéral.

3 votes

Pour les chaînes de caractères de plusieurs lignes, au lieu des guillemets simples ou doubles, vous pouvez utiliser ` (caractère de retour en arrière. à gauche de la touche #1). C'est ce qu'on appelle des "littéraux de modèle".

5 votes

Définitivement : ne vous contentez pas de cette réponse et regardez les autres.

63voto

Didier Ghys Points 17636

La fonction JSON.stringify transformera votre objet json en une chaîne de caractères :

var jsonAsString = JSON.stringify(obj);

Dans le cas où le navigateur ne l'implémente pas (IE6/IE7), utilisez la balise JSON2.js script. C'est sûr car il utilise l'implémentation native si elle existe.

29voto

Hidden Points 279

Cela peut être assez facile et simple

var obj = new Object();
obj.name = "Raj";
obj.age = 32;
obj.married = false;

//convert object to json string
var string = JSON.stringify(obj);

//convert string to Json Object
console.log(JSON.parse(string)); // this is your requirement.

16voto

TimWolla Points 11210

Utilisez JSON.stringify :

> JSON.stringify({ asd: 'bla' });
'{"asd":"bla"}'

0 votes

Voir aussi json2.js si vous devez prendre en charge des navigateurs plus anciens.

0 votes

Oui, voici un lien vers sa liste de projets GitHub : github.com/douglascrockford

0 votes

@nepsdotin Douglas at SO is not Douglas Crockford, "to son GitHub"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X