2012-01-22 34 views
58
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); 

} 

En un código como este, intento crear cadena JSON solo para jugar. Está arrojando un error, pero si pongo todo el nombre, la edad, casado en una sola línea (línea 2), no es así. ¿Cuál es el problema?¿Cómo crear una cadena JSON en JavaScript?

+2

Ver esto responde a http://stackoverflow.com/questions/3904269/convert- object-to-json-string – powtac

+0

'eval' es ** evil **. – candlejack

Respuesta

56

JavaScript no maneja cadenas en múltiples líneas.

Usted necesitará para concatenar los:

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

También puede utilizar literales de plantilla en ES6 y superiores: (See here for the documentation)

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

O ponga un \ al final de cada línea en el literal. – Phrogz

+1

Para cadenas de varias líneas, en lugar de comillas simples o dobles, puede usar '(carácter de retroceso a la izquierda de la tecla n. ° 1). Estos se llaman 'literales de plantilla'. – Blue

+2

Definitivamente: no se conforme con esta respuesta y mire a los demás. – AsTeR

13

Uso JSON.stringify:

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

Buen consejo, pero no muestra cuál es el problema. – Phrogz

+0

Consulte también [json2.js] (https://github.com/douglascrockford/JSON-js) si necesita admitir navegadores antiguos. – Douglas

+0

@Douglas es este Douglas Crockford? ¿¿¿Sólo curioso??? – nepsdotin

-3

cadenas JSON no pueden tener saltos de línea en ellos. Tendría que hacer todo en una línea: {"key":"val","key2":"val2",etc....}.

Pero no genere cadenas JSON usted mismo. Hay muchas bibliotecas que lo hacen por usted, la mayor de las cuales es jquery.

+6

JSON puede tener saltos de línea, pero la sintaxis literal de cadenas de JavaScript no. –

+0

interalmente dentro de una cadena, sí, pero no entre pares clave/valor. –

+1

Creo que está confundiendo la sintaxis literal de la cadena de JavaScript que no puede contener un carácter de nueva línea no escamada y marcado JSON. El marcado JSON ciertamente puede contener saltos de línea. –

58

La función JSON.stringify convertirá su objeto json en una cadena:

var jsonAsString = JSON.stringify(obj); 

En caso de que el navegador no lo implemente (IE6/IE7), utilice el script JSON2.js. Es seguro ya que usa la implementación nativa si existe.

+1

Esa debería ser la respuesta correcta – sandman

128

La manera de hacerlo es:

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

supongo que de esta manera puede reducir las posibilidades de errores.

+2

Esta debería ser la respuesta porque es elegante. – Pred

5

creo que de esta manera le ayuda ...

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

Esto puede ser bastante fácil y 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. 
Cuestiones relacionadas