Pregunta Parse JSON en JavaScript? [duplicar]


Esta pregunta ya tiene una respuesta aquí:

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

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

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


1509
2018-02-08 16:34


origen


Respuestas:


La mayoría de los navegadores soportan JSON.parse(), que se define en la quinta edición de ECMA-262 (la especificación en la que se basa JavaScript). Su uso es simple:

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

alert(obj.count);

Para los navegadores que no lo pueden implementarlo usando json2.js.

Como se señaló en los comentarios, si ya está utilizando jQuery, hay un $.parseJSON función que se asigna a JSON.parse si está disponible o una forma de eval en navegadores más antiguos. Sin embargo, esto realiza comprobaciones adicionales e innecesarias que también son realizadas por JSON.parse, por lo tanto, para obtener el mejor rendimiento general, recomendaría usarlo así:

var json = '{"result":true,"count":1}',
    obj = JSON && JSON.parse(json) || $.parseJSON(json);

Esto asegurará que uses nativo JSON.parse inmediatamente, en lugar de que jQuery realice verificaciones de cordura en la cadena antes de pasarla a la función de análisis nativo.


1863
2018-02-08 16:38



En primer lugar, debe asegurarse 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 es posible, porque estas cosas se manejan bien en esas bibliotecas.

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

Esto no se recomienda si obtiene el objeto JSON de otra fuente que no es absolutamente confiable porque la función eval permite el código renegado, si así lo desea.

Aquí hay un ejemplo del uso de 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 si 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.


91
2018-02-08 16:46



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

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

49
2017-07-18 21:57



Si quieres usar JSON 3 para navegadores más antiguos, puede cargarlo condicionalmente 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 estándar window.JSON el objeto está disponible para usted sin importar qué navegador esté ejecutando un cliente.


32
2018-04-19 18:52



El siguiente ejemplo lo dejará en claro:

var jsontext   = '{"name":"x","age":"11"}';
var getContact = JSON.parse(jsontext);
document.write(getContact.name + ", " + getContact.age);

// Output: x, 11

O

También puedes usar el eval función. El siguiente ejemplo es usar el eval función:

var jsontext   = '{"name":"x","age":"11"}';
var getContact = eval('(' + jsontext + ')');
document.write(getContact.name + ", " + getContact.age);

// Output: x, 11

Desde el JSON.parse la función es más segura y se ejecuta más rápido que la función eval, te recomiendo usar JSON.parse función.


31
2017-10-01 07:42



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

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

25
2017-10-22 15:06



Puede usar la función eval como en otras respuestas. (No olvide las llaves adicionales). Sabrá por qué cuando cava más profundo), o simplemente use la función jQuery parseJSON:

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

O

Puedes usar este código a continuación.

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

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


24
2018-06-06 03:51



La forma más fácil de usar parse() método:

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;

23
2018-06-04 14:44