2012-03-14 14 views
9

Ho provato a rilevare il supporto JSON con if(JSON.parse) {} ma non funziona. C'è un modo per rilevare il supporto JSON?Come rilevare il supporto JSON in javascript?

+2

Vuoi dire in una libreria specifica o javascript stesso? JSON è solo una notazione per oggetti javascript, javascript stesso lo supporta in modo nativo. – websymphony

+0

@websymphony, ma non ha la possibilità di * analizzare * in modo nativo, ad es. Creare un oggetto con una stringa. –

+1

Hai provato con if ('JSON' nella finestra)? – stecb

risposta

22

Tratto da JSON più famoso implementazione https://github.com/douglascrockford/JSON-js/blob/master/json2.js

var JSON; 
if (JSON && typeof JSON.parse === 'function') { 
    .... 
} 

(Ho unito le due if: if (!JSON) { della linea 163 e la linea 406. if (typeof JSON.parse !== 'function') { di

Il trucco è che il var JSON otterrà il valore dell'oggetto JSON del browser, undefined in caso contrario.

Nota che nei versi latest sulla della biblioteca hanno cambiato il codice a qualcosa di simile:

if (typeof JSON === 'object' && typeof JSON.parse === 'function') { 
    .... 
} 

(senza pre-dichiarare la var JSON)

+0

grazie mille –

+1

Ora puoi controllare 'if (JSON ...)' ?? ** riceverai un errore **. è come fare 'if (lalala ...) // error'. Il modo corretto è: 'if (typeof JSON ===" undefined "...)' –

+0

@RoyiNamir Hai ragione ... Avevo dimenticato una riga di codice ... Prima di 'if' ci dovrebbe essere un' var JSON; '. Ho persino aggiunto la versione "più recente" dell'assegno. – xanatos

0

potrebbe non esattamente contare come una risposta a ciò che è stato chiesto, ma sarebbe forse l'analisi del user agent (navigatore) e verificando le versioni si è certi che supportino il parser come possibile alternativa?

+0

Ci sono così tanti possibili user agent che questo non è pratico. È difficile tenersi aggiornati. C'è una lunga storia di bug con questo tipo di rilevamento di user-agent, e di solito ci sono soluzioni migliori (rilevamento di funzionalità). – Liam

Problemi correlati