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?


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,
           }`;

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.


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.


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.


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

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


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.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.