2012-06-22 11 views
6

Estoy usando Crockford 's json2.js. Cuando quiero stringify, hago JSON.stringify() ... funciona muy bien.¿Cómo saber qué objeto JSON se está utilizando (Crockford u otro)?

Sin embargo, aquellos que han echado un vistazo al código saben que difiere a los objetos y propiedades JSON existentes. Sospecho que un cierto problema que estoy teniendo puede deberse a esta deferencia.

¿Existe alguna propiedad del objeto JSON que pueda verificar para ver si el navegador está utilizando el objeto de Crockford o algún otro? Sería bueno poder hacer algo como alert(JSON.version());

+1

¿Es seguro asumir que o bien todos son objetos JSON aplicación o ninguno de ellos se Crockford? Si es así, entonces podría verificar el objeto global JSON antes de presentar el guión de Crockford, establecer una variable global como 'nativeJSON = false;' que podría consultar más adelante en su código. –

+0

¡Además, +1 para señalar esta práctica secuencia de comandos! –

+0

@ davidkennedy85, creo (pero no lo sé) que muchos navegadores en la actualidad tienen objetos JSON nativos en su implementación de JavaScript ... creo. No se; fuera de mi liga. –

Respuesta

3

Antes de cargar el guión de Crockford, se puede comprobar por el objeto global JSON exactamente como lo hace:

<script> 
    var JSON, 
     nativeJSON = true; 

    if (!JSON) { 
     var nativeJSON = false; 
     document.write('<script src="js/json2.js"><\/script>'); 
    } 

    if (!nativeJSON) { 
     // All JSON objects are using Crockford's implementation 
    } else { 
     // All JSON objects from here on out are NOT using Crockford's implementation 
    } 
</script> 
+0

No [* all *] (https://github.com/douglascrockford/JSON-js/blob/master/json2.js), creo? – Arjan

+1

¿Los scripts cargados mediante el atributo 'src' se ejecutan en el orden secuenciado en la página cada vez? No me gustaría que el cheque se produzca después de que se cargó json2.js. –

+0

Ese es un buen punto. @Sarfraz publicó una solución que pediré prestada. –

4

Usted puede decidir que se debe usar como esto :

<script>window.JSON || document.write('<script src="js/json2.js"><\/script>')</script> 

Esto comprueba window.JSON (reconocido por el navegador) en primer lugar si existe, usar que las importaciones lo demás json2.js de Crockford.

actualización

var whichJSON = null; 

if (! window.JSON) { 
    document.write('<script src="js/json2.js"><\/script>'); 
    whichJSON = 'Crockford Version'; 
} 
else { 
    whichJSON = 'Browser Native Version'; 
} 

alert(whichJSON); 
+2

Esto es muy elegante, pero no hace que sea más fácil verificar más adelante en el código qué implementación se está utilizando. –

+0

@ davidkennedy85: Sí, no me preocuparé por la versión, ya que el propósito sería usar JSON, cualquiera que esté disponible :) – Sarfraz

+1

Estoy de acuerdo, pero no responde la pregunta :) –

Cuestiones relacionadas