2009-05-21 10 views
87

He visto referencias a algunos navegadores que soportan el análisis JSON/serialización de objetos de forma segura y eficiente a través del Objeto window.JSON, pero los detalles son difíciles de encontrar. ¿Alguien puede apuntar en la dirección correcta? ¿Cuáles son los métodos que este objeto expone? ¿En qué navegadores se admite?Soporte JSON nativo del navegador (window.JSON)

+8

Consulte [¿Cuándo puedo usar el análisis JSON?] (Http://caniuse.com/json) para obtener información sobre navegadores con soporte nativo para el [objeto JSON] (http://ecma262-5.com/ELS5_Section_15. htm # Section_15.12). – outis

Respuesta

104

Todos los navegadores modernos son compatibles con la codificación/decodificación JSON nativa (Internet Explorer 8+, Firefox 3.1+, Safari 4+ y Chrome 3+). Básicamente, JSON.parse(str) analizará la cadena JSON en str y devolverá un objeto, y JSON.stringify(obj) devolverá la representación JSON del objeto obj.

Más detalles sobre MDN article.

+0

Sé que el soporte no está muy extendido, pero usar este método debería ser mucho más rápido y más seguro que evaluar() una cadena, por lo que quiero usarlo cuando esté disponible. ¿Alguna idea sobre el soporte de otros navegadores? – levik

+0

No dije que no lo use, le dije que no cuente con eso. Definitivamente, compruebe si está disponible (en este momento solo IE8 y los pocos usuarios de Fx Beta) y úselo si es así, pero solo digo que no debe suponer que el navegador lo admite. A partir de ahora, esos dos son los únicos navegadores que lo admiten, y WebKit está trabajando en ello en este momento, por lo que probablemente estará en Google Chrome y Safari pronto. –

+14

Ah, y en una nota lateral, NUNCA eval() cadenas JSON. En su lugar, use una de las muchas bibliotecas de análisis JSON disponibles. –

12

La ventaja de usar json2.js es que solo instalará un analizador si el navegador no tiene uno. Puede mantener la compatibilidad con los navegadores más antiguos, pero use el analizador nativo JSON (que es más seguro y más rápido) si está disponible.

navegadores con JSON nativo:

  • IE8 +
  • Firefox 3.1 +
  • Safari 4.0.3+
  • Opera 10.5+

G.

10

[extendiéndose musicfreak comentario]

Si está utilizando jQuery, utilice parseJSON

var obj = jQuery.parseJSON(data) 

Internamente se comprueba si el navegador soporta .JSON.parse, y (si está disponible) llama window.JSON.parse nativa.

Si no, se analiza automáticamente.

29

jQuery-1.7.1.js - 555 ... línea de

parseJSON: function(data) { 
    if (typeof data !== "string" || !data) { 
     return null; 
    } 

    // Make sure leading/trailing whitespace is removed (IE can't handle it) 
    data = jQuery.trim(data); 

    // Attempt to parse using the native JSON parser first 
    if (window.JSON && window.JSON.parse) { 
     return window.JSON.parse(data); 
    } 

    // Make sure the incoming data is actual JSON 
    // Logic borrowed from http://json.org/json2.js 
    if (rvalidchars.test(data.replace(rvalidescape, "@") 
     .replace(rvalidtokens, "]") 
     .replace(rvalidbraces, ""))) { 

     return (new Function("return " + data))(); 

    } 
    jQuery.error("Invalid JSON: " + data); 
} 





rvalidchars = /^[\],:{}\s]*$/, 

rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, 

rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, 

rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, 
+4

Agradable. Buen argumento para usar jQuery. – OneWorld

+9

Más como un argumento para mirar dentro de jQuery =) – Olga

8

Para el beneficio de cualquier persona que se encuentra con este tema - para obtener una lista actualizada y definitiva de los navegadores que soportan la Objeto JSON look here.. Una breve respuesta genérica: casi todos los navegadores que realmente importan en el año 2013+.

Cuestiones relacionadas