Como criar string JSON em 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 );

}

Em um código parecido com este, estou tentando criar uma string JSON apenas para brincar. É um erro de arremesso, mas se eu colocar todo o nome, idade, casado em uma única linha (linha 2) não funciona. Qual é o problema?


Respostas:


85

Javascript não controla Strings em várias linhas.

Você precisará concatenar:

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

Você também pode usar literais de modelo no ES6 e acima: ( Veja aqui a documentação )

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

13
Ou coloque um \ no final de cada linha do literal.
Phrogz

3
Para strings de várias linhas, em vez de aspas simples ou duplas, você pode usar `(caractere de retrocesso. À esquerda da tecla # 1). Eles são chamados de 'literais de modelo'.
Azul de

5
Definitivamente: não se conforme com esta resposta e olhe para as outras.
AsTeR

Literais de modelo são ECMA Script 2015 Standard. Esta pergunta e resposta já é de 2012. Mas vou editá-lo em :)
bardiir

Realmente? A concatenação de strings do zero é a melhor maneira de construir JSON? Acho que a outra resposta deve ser a resposta aceita.
rory.ap

264

A maneira como eu faço isso é:

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

Acho que dessa forma pode reduzir as chances de erros.


62

A função JSON.stringify transformará seu objeto json em uma string:

var jsonAsString = JSON.stringify(obj);

Caso o navegador não implemente (IE6 / IE7), use o script JSON2.js . É seguro, pois usa a implementação nativa, se houver.


23

Isso pode ser muito fácil e simples

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

Acho que assim te ajuda ...

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

-5

strings json não podem ter quebras de linha. Você teria que fazer tudo em uma linha:{"key":"val","key2":"val2",etc....} .

Mas não gere strings JSON sozinho. Existem muitas bibliotecas que fazem isso para você, a maior delas é o jquery .


8
JSON pode ter quebras de linha, mas a sintaxe literal de string JavaScript não.

internamente em uma string, sim, mas não entre pares chave / valor.
Marc B

1
Acho que você está confundindo a sintaxe literal da string JavaScript, que não pode conter um caractere de nova linha sem escape, e a marcação JSON. A marcação JSON pode certamente conter quebras de linha.

1
... cole o código da sua pergunta em jsonlint.com (sem o etc .... é claro) . Depois de clicar em Validar, você verá que ele realmente insere novas linhas quando for bem impresso.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.