2012-06-22 8 views
6

Sto usando Crockford 's json2.js. Quando voglio stringificare, faccio JSON.stringify() ... funziona alla grande.Come sapere quale oggetto JSON viene utilizzato (Crockford's o un altro)?

Tuttavia, chi ha dato un'occhiata al codice sa che rimanda agli oggetti e alle proprietà JSON esistenti. Sospetto che un certo problema che sto avendo potrebbe essere dovuto a questa deferenza.

Esiste una proprietà dell'oggetto JSON che posso controllare per vedere se il browser utilizza l'oggetto di Crockford o qualche altro? Sarebbe bello essere in grado di fare qualcosa di simile alert(JSON.version());

+1

E 'lecito ritenere che o tutti gli oggetti JSON sono l'attuazione o nessuno di essi sono di Crockford? In tal caso, è possibile verificare l'oggetto globale JSON prima di introdurre lo script di Crockford, impostare una variabile globale come 'nativeJSON = false;' che si possa fare riferimento più avanti nel codice. –

+0

Inoltre, +1 per indicare questo comodo script! –

+0

@ davidkennedy85, credo (ma non lo so) che molti browser in questi giorni hanno oggetti JSON nativi nella loro implementazione javascript ... Credo. Non so; fuori dalla mia lega. –

risposta

3

Prima di caricare la sceneggiatura di Crockford, è possibile controllare per l'oggetto globale JSON esattamente come lo fa:

<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

Non [* tutti *] (https://github.com/douglascrockford/JSON-js/blob/master/json2.js), penso? – Arjan

+1

Gli script caricati tramite l'attributo 'src' vengono eseguiti nell'ordine in sequenza sulla pagina ogni volta? Non vorrei che il controllo si verificasse dopo che json2.js è stato caricato. –

+0

Questo è un buon punto. @Sarfraz ha pubblicato una soluzione che prenderò in prestito. –

4

Si può decidere quello da usare come questo :

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

Questa verifica la presenza di window.JSON (supportato dal browser) prima se esiste, all'uso che altro importa json2.js di Crockford.

aggiornamento

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

Questo è molto elegante, ma non rende più facile controllare in seguito nel codice quale implementazione viene utilizzata. –

+0

@ davidkennedy85: Sì, non mi preoccupo per quale versione poiché lo scopo sarebbe quello di utilizzare JSON qualunque sia disponibile :) – Sarfraz

+1

Sono d'accordo, ma non risponde alla domanda :) –

Problemi correlati