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

96
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 jouer. C'est une erreur de lancement, mais si je mets tout le nom, l'âge, le mariage sur une seule ligne (ligne 2), ce n'est pas le cas. Quel est le problème?

indianwebdevil
la source
2
Voir ces réponses stackoverflow.com/questions/3904269/…
powtac

Réponses:

85

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

Vous devrez concaténer ceux-ci:

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

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

var obj = `{
           "name" : "Raj",
           "age" : 32,
           "married" : false,
           }`;
bardiir
la source
13
Ou mettez un \ à la fin de chaque ligne dans le littéral.
Phrogz
3
Pour les chaînes sur plusieurs lignes, au lieu de guillemets simples ou doubles, vous pouvez utiliser `(caractère de coche arrière. À gauche de la touche # 1). Ceux-ci sont appelés «littéraux de modèle».
Bleu
5
Certainement: ne vous contentez pas de cette réponse et regardez les autres.
AsTeR
Les littéraux de modèle sont ECMA Script 2015 Standard. Cette question et réponse date déjà de 2012. Mais je vais le modifier dans :)
bardiir
Vraiment? La concaténation de chaînes à partir de zéro est le meilleur moyen de créer JSON? Je pense que l'autre réponse devrait être la réponse acceptée.
rory.ap
264

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 manière peut réduire les risques d'erreurs.

Akhil Sekharan
la source
62

La fonction JSON.stringify transformera votre objet json en une chaîne:

var jsonAsString = JSON.stringify(obj);

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

Didier Ghys
la source
23

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.
Caché
la source
13

Utilisez JSON.stringify:

> JSON.stringify({ asd: 'bla' });
'{"asd":"bla"}'
TimWolla
la source
Voir aussi json2.js si vous avez besoin de prendre en charge d'anciens navigateurs.
Douglas
Oui, voici un lien vers sa liste de projets GitHub: github.com/douglascrockford
Douglas
@nepsdotin Douglas à SO n'est pas Douglas Crockford, "à son GitHub"
TimWolla
Aah, j'ai raté ça, non, je ne suis pas Crockford!
Douglas
5

Je pense que cette façon vous aide ...

var name=[];
var age=[];
name.push('sulfikar');
age.push('24');
var ent={};
for(var i=0;i<name.length;i++)
{
ent.name=name[i];
ent.age=age[i];
}
JSON.Stringify(ent);
SULFIKAR AN
la source
-6

Les chaînes json ne peuvent pas contenir de sauts de ligne. Il faudrait faire toutes les lignes d'un: {"key":"val","key2":"val2",etc....}.

Mais ne générez pas vous-même des chaînes JSON. Il existe de nombreuses bibliothèques qui le font pour vous, dont la plus importante est jquery .

Marc B
la source
8
JSON peut avoir des sauts de ligne, mais pas la syntaxe littérale de chaîne JavaScript.
intérieurement dans une chaîne, oui, mais pas entre les paires clé / valeur.
Marc B
1
Je pense que vous confondez la syntaxe littérale de chaîne JavaScript qui ne peut pas contenir un caractère de nouvelle ligne sans échappement et le balisage JSON. Le balisage JSON peut très certainement contenir des sauts de ligne.
1
... collez le code de votre question dans jsonlint.com (sans le etc .... bien sûr) . Après avoir cliqué sur Valider, vous verrez qu'il insère en fait des nouvelles lignes lorsqu'il s'imprime correctement.