Búsqueda de sitios web

¿Analizar JSON en JavaScript?


Quiero analizar una cadena JSON en JavaScript. La respuesta es algo así

var response = '{"result":true,"count":1}';

¿Cómo puedo obtener los valores result y count de esto?

Respuesta #1

La forma estándar de analizar JSON en JavaScript es JSON.parse()

La API JSON se introdujo con ES5 (2011) y desde entonces se ha implementado en >99% de los navegadores por cuota de mercado, y en Node.js. Su uso es sencillo:

const json = '{ "fruit": "pineapple", "fingers": 10 }';
const obj = JSON.parse(json);
console.log(obj.fruit, obj.fingers);

La única vez que no podrás usar JSON.parse() es si estás programando para un navegador antiguo, como IE 7 (2006), IE 6 (2001), Firefox 3 (2008), Safari 3.x (2009), etc. Alternativamente, podrías estar en un entorno de JavaScript esotérico que no incluya las APIs estándar. En estos casos, utiliza json2.js, la implementación de referencia de JSON escrita por Douglas Crockford, el inventor de JSON. Esa biblioteca proporcionará una implementación de JSON.parse().

Al procesar archivos JSON extremadamente grandes, JSON.parse() puede fallar debido a su naturaleza sincrónica y su diseño. Para resolver esto, el sitio web de JSON recomienda bibliotecas de terceros como Oboe.js y clarinet, que proporcionan análisis JSON en flujo.

jQuery alguna vez tuvo una función $.parseJSON(), pero fue desaprobada con jQuery 3.0. En cualquier caso, durante mucho tiempo, no fue más que un envoltorio alrededor de JSON.parse().

Respuesta #2

¡ADVERTENCIA!

Esta respuesta proviene de una era antigua de la programación en JavaScript durante la cual no existía una forma incorporada de analizar JSON. Los consejos dados aquí ya no son aplicables y probablemente sean peligrosos. Desde una perspectiva moderna, analizar JSON involucrando jQuery o llamando a eval() es una tontería. A menos que necesites soportar IE 7 o Firefox 3.0, la forma correcta de analizar JSON es JSON.parse().

Primero que nada, tienes que asegurarte de que el código JSON sea válido.

Después de eso, recomendaría usar una biblioteca de JavaScript como jQuery o Prototype si puedes, porque estas cosas se manejan bien en esas bibliotecas.

Por otro lado, si no quieres usar una biblioteca y puedes garantizar la validez del objeto JSON, simplemente envolvería la cadena en una función anónima y usaría la función eval.

No se recomienda esto si estás obteniendo el objeto JSON de otra fuente que no sea absolutamente confiable porque la función eval permite código renegado, por así decirlo.

Aquí hay un ejemplo de cómo usar la función eval:

var strJSON = '{"result":true,"count":1}';
var objJSON = eval("(function(){return " + strJSON + ";})()");
alert(objJSON.result);
alert(objJSON.count);

Si controlas qué navegador se está utilizando o no te preocupan las personas con un navegador más antiguo, siempre puedes usar el método JSON.parse.

Esta es realmente la solución ideal para el futuro.

Respuesta #3

Si estás obteniendo esto de un sitio externo, podría ser útil usar getJSON de jQuery. Si es una lista, puedes iterarla con $.each

$.getJSON(url, function (json) {
    alert(json.result);
    $.each(json.list, function (i, fb) {
        alert(fb.result);
    });
});

Respuesta #4

Si quieres usar JSON 3 en navegadores antiguos, puedes cargarlo de manera condicional con:

<script>
    window.JSON || 
    document.write('<script src="//cdnjs.cloudflare.com/ajax/libs/json3/3.2.4/json3.min.js"><\/scr'+'ipt>');
</script>

Ahora el objeto estándar window.JSON está disponible para ti sin importar qué navegador esté usando un cliente.

Respuesta #5

El siguiente ejemplo lo dejará claro:

let contactJSON = '{"name":"John Doe","age":"11"}';
let contact = JSON.parse(contactJSON);
console.log(contact.name + ", " + contact.age);

// Output: John Doe, 11

Respuesta #6

Si pasas una variable de cadena (una cadena JSON bien formada) a JSON.parse desde MVC @Viewbag que tiene comillas dobles, '"', como comillas, necesitas procesarla antes de JSON.parse (jsonstring)

    var jsonstring = '@ViewBag.jsonstring';
    jsonstring = jsonstring.replace(/&quot;/g, '"');  

Respuesta #7

Puedes usar la función eval como en algunas otras respuestas. (No olvides los corchetes adicionales.) Sabrás por qué cuando profundices más), o simplemente usa la función de jQuery parseJSON:

var response = '{"result":true , "count":1}'; 
var parsedJSON = $.parseJSON(response);

O

Puedes usar el siguiente código.

var response = '{"result":true , "count":1}';
var jsonObject = JSON.parse(response);

Y puedes acceder a los campos usando jsonObject.result y jsonObject.count.

Actualizar :

Si tu salida es undefined entonces necesitas seguir ESTA respuesta. Tal vez tu cadena json tenga un formato de arreglo. Necesitas acceder a las propiedades del objeto json así

var response = '[{"result":true , "count":1}]'; // <~ Array with [] tag
var jsonObject = JSON.parse(response);
console.log(jsonObject[0].result); //Output true
console.log(jsonObject[0].count); //Output 1

Respuesta #8

La forma más fácil usando el método parse():

var response = '{"a":true,"b":1}';
var JsonObject= JSON.parse(response);

este es un ejemplo de cómo obtener valores:

var myResponseResult = JsonObject.a;
var myResponseCount = JsonObject.b;

Respuesta #9

JSON.parse() convierte cualquier cadena JSON pasada a la función en un objeto JSON.

Para una mejor comprensión, presiona F12 para abrir el Inspeccionar elemento de tu navegador y ve a la consola para escribir los siguientes comandos:

var response = '{"result":true,"count":1}'; // Sample JSON object (string form)
JSON.parse(response); // Converts passed string to a JSON object.

Ahora ejecuta el comando:

console.log(JSON.parse(response));

Obtendrás una salida como Objeto {resultado: true, count: 1}.

Para usar ese objeto, puedes asignarlo a la variable, digamos obj:

var obj = JSON.parse(response);

Ahora, utilizando obj y el operador punto (.) puedes acceder a las propiedades del objeto JSON.

Intenta ejecutar el comando

console.log(obj.result);

Respuesta #10

Sin usar una biblioteca, puedes usar eval, la única ocasión en que deberías usarlo. Sin embargo, es más seguro usar una biblioteca.

por ejemplo...

var response = '{"result":true , "count":1}';

var parsedJSON = eval('('+response+')');

var result=parsedJSON.result;
var count=parsedJSON.count;

alert('result:'+result+' count:'+count);

Respuesta #11

Si quieres

var response = '{"result":true,"count":1}';
var JsonObject= JSON.parse(response);

puedes acceder a los elementos JSON mediante JsonObject con (.) punto:

JsonObject.result;
JsonObject.count;

Respuesta #12

Pensé que JSON.parse(myObject) funcionaría. Pero dependiendo de los navegadores, podría valer la pena usar eval('('+myObject+')'). El único problema que puedo recomendar vigilar es la lista multinivel en JSON.

Respuesta #13

Una manera fácil de hacerlo:

var data = '{"result":true,"count":1}';
var json = eval("[" +data+ "]")[0]; // ;)

Artículos relacionados