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)
Respuesta
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.
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
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. –
Ah, y en una nota lateral, NUNCA eval() cadenas JSON. En su lugar, use una de las muchas bibliotecas de análisis JSON disponibles. –
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.
[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.
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,
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+.
- 1. restaurar objeto window.JSON reemplazado
- 2. Gráfico de soporte del navegador CSS
- 3. Soporte PHP nativo en Visual Studio 2010?
- 4. will_paginate Soporte de JSON?
- 5. ¿Soporte de navegador para stopImmediatePropagation?
- 6. jQuery compruebe si la posición de soporte del navegador: fija
- 7. ¿Cómo detectar si el soporte del navegador es flash?
- 8. Javascript check para soporte de marcador nativo en IE8
- 9. png-24 y soporte de navegador
- 10. ¿Java tiene soporte nativo para eventos, similar al de C#?
- 11. Idiomas con soporte nativo/sintáctico/gráfico en línea?
- 12. Android Añadir soporte nativo - jni.h no resuelto, android/log.h etc.
- 13. ¿Soporte de Xpath en mi navegador?
- 14. Módulo de diseño CSS3 Navegador Soporte
- 15. XTend-lazo del soporte y adición de soporte del rango
- 16. Comprobar el soporte de la propiedad del CSS del navegador con JavaScript?
- 17. 'Inicialización del soporte'. (C++)
- 18. Abra el navegador nativo desde una aplicación de Android
- 19. Cómo desarrollar complementos para el navegador nativo de Android
- 20. ¿Cómo probar si el navegador admite el atributo marcador de posición nativo?
- 21. autocompletado nativo del navegador para formularios generados dinámicamente (manejado con ajax)
- 22. Navegador sin cabeza con soporte javascript completo para java
- 23. ¿Cómo puedo verificar el soporte táctil real en un navegador
- 24. ¿Detecta el soporte de navegador para XMLHttpRequests entre dominios?
- 25. Soporte de navegador cruzado de `page-break-inside: avoid;`
- 26. ¿Qué navegador tiene actualmente el mejor soporte para HTML 5?
- 27. Soporte de extensión del navegador en Google Chrome en el móvil
- 28. Detectando el soporte del navegador SNI (Server Name Indication) en javascript
- 29. Detectar el soporte del navegador para la visualización: bloque en línea
- 30. Cómo detectar si el soporte del navegador especificó css pseudo-class?
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