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?

Indianwebdevil
fonte
2
Veja estas respostas stackoverflow.com/questions/3904269/…
powtac

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

Akhil Sekharan
fonte
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.

Didier Ghys
fonte
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.
Escondido
fonte
13

Use JSON.stringify:

> JSON.stringify({ asd: 'bla' });
'{"asd":"bla"}'
TimWolla
fonte
Consulte também json2.js se precisar oferecer suporte a navegadores mais antigos.
Douglas
Sim, aqui está um link para sua lista de projetos no GitHub: github.com/douglascrockford
Douglas
@nepsdotin Douglas no SO não é Douglas Crockford, "para seu GitHub"
TimWolla
Aah, perdi isso, não, eu não sou Crockford!
Douglas
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);
SULFIKAR AN
fonte
-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 .

Marc B
fonte
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.