¿Cómo crear una cadena 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 );

}

En un código como este, estoy tratando de crear una cadena JSON solo para jugar. Es un error de lanzamiento, pero si pongo todo el nombre, la edad, el matrimonio en una sola línea (línea 2), no es así. ¿Cuál es el problema?

diablo indio
fuente
2
Vea estas respuestas stackoverflow.com/questions/3904269/…
powtac

Respuestas:

85

Javascript no maneja cadenas en varias líneas.

Deberá concatenar esos:

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

También puede usar literales de plantilla en ES6 y superior: ( consulte aquí la documentación )

var obj = `{
           "name" : "Raj",
           "age" : 32,
           "married" : false,
           }`;
bardiir
fuente
13
O coloque \ al final de cada línea en el literal.
Phrogz
3
Para cadenas de varias líneas, en lugar de comillas simples o dobles, puede usar `(carácter de tilde a la izquierda de la tecla # 1). Estos se denominan "literales de plantilla".
Azul
5
Definitivamente: no se conforme con esta respuesta y mire a los demás.
AsTeR
Los literales de plantilla son ECMA Script 2015 Standard. Esta pregunta y respuesta ya son de 2012. Pero lo
editaré
De Verdad? ¿La concatenación de cadenas desde cero es la mejor manera de construir JSON? Creo que la otra respuesta debería ser la respuesta aceptada.
rory.ap
264

La forma en que lo hago es:

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

Supongo que de esta manera se pueden reducir las posibilidades de errores.

Akhil Sekharan
fuente
62

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), use el script JSON2.js . Es seguro ya que usa la implementación nativa si existe.

Didier Ghys
fuente
23

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.
Oculto
fuente
13

Utilizar JSON.stringify:

> JSON.stringify({ asd: 'bla' });
'{"asd":"bla"}'
TimWolla
fuente
Consulte también json2.js si necesita admitir navegadores más antiguos.
Douglas
Sí, aquí hay un enlace a su lista de proyectos de GitHub: github.com/douglascrockford
Douglas
@nepsdotin Douglas en SO no es Douglas Crockford, "a su GitHub"
TimWolla
Aah, me perdí eso, no, ¡ no soy Crockford!
Douglas
5

Creo que esta forma te 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);
SULFIKAR AN
fuente
-6

Las cadenas de json no pueden tener saltos de línea. Habría que hacer que todo primera 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 .

Marc B
fuente
8
JSON puede tener saltos de línea, pero la sintaxis literal de cadena de JavaScript no.
internamente dentro de una cadena, sí, pero no entre pares clave / valor.
Marc B
1
Creo que está confundiendo la sintaxis literal de cadena de JavaScript que no puede contener un carácter de nueva línea sin escape y marcado JSON. El marcado JSON ciertamente puede contener saltos de línea.
1
... pegue el código de su pregunta en jsonlint.com (sin el etc .... por supuesto) . Después de hacer clic en Validar, verá que en realidad inserta nuevas líneas cuando imprime de forma bonita.