2009-05-21 26 views
87

Ho visto riferimenti ad alcuni browser che supportano in modo nativo l'analisi/serializzazione JSON di oggetti in modo sicuro ed efficiente tramite l'oggetto window.JSON, ma i dettagli sono difficili da trovare. Qualcuno può indicare nella giusta direzione? Quali sono i metodi esposti da questo oggetto? Quali browser è supportato sotto?Supporto JSON nativo del browser (window.JSON)

+8

Vedere [Quando è possibile utilizzare l'analisi JSON?] (Http://caniuse.com/json) per informazioni sui browser con supporto nativo per [oggetto JSON] (http://ecma262-5.com/ELS5_Section_15. htm # Section_15.12). – outis

risposta

104

Tutti i browser moderni supportano la codifica/decodifica JSON nativa (Internet Explorer 8+, Firefox 3.1+, Safari 4+ e Chrome 3+). Fondamentalmente, JSON.parse(str) analizzerà la stringa JSON in str e restituirà un oggetto, e JSON.stringify(obj) restituirà la rappresentazione JSON dell'oggetto obj.

Ulteriori dettagli su MDN article.

+0

So che il supporto non è molto diffuso, ma l'utilizzo di questo metodo dovrebbe essere molto più veloce e più sicuro di eval() in una stringa, quindi voglio usarlo dove è disponibile. Qualche idea sul supporto di altri browser? – levik

+0

Non ho detto di non usarlo, ho detto di non contarci. Verifica definitivamente se è disponibile (a questo punto solo IE8 e pochi utenti di Fx Beta) e usalo se è così, ma sto solo dicendo che non devi supporre che il browser lo supporti. A partire da ora, questi due sono gli unici browser che lo supportano e WebKit ci sta lavorando proprio ora, quindi presto sarà probabilmente in Google Chrome e Safari. –

+14

Oh, e su una nota a margine, MAI eval() stringhe JSON. Invece, utilizzare una delle tante librerie di analisi JSON disponibili. –

12

Il vantaggio dell'utilizzo di json2.js è che installerà un parser solo se il browser non ne ha già uno. È possibile mantenere la compatibilità con i browser meno recenti, ma utilizzare il parser JSON nativo (che è più sicuro e veloce) se disponibile.

browser con JSON nativa:

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

G.

10

[estendendo musicfreak commento]

Se si utilizza jQuery, utilizzare parseJSON

var obj = jQuery.parseJSON(data) 

Internamente controlla se il browser supporta .JSON.parse, e (se disponibile) chiama window.JSON.parse nativo.

In caso contrario, si analizza.

29

jQuery-1.7.1.js - 555 line ...

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

Bello. Buon argomento per usare jQuery. – OneWorld

+9

Più come un argomento da guardare dentro jQuery =) – Olga

8

A beneficio di chi si imbatte in questa discussione - per un up-to-date, elenco definitivo dei browser che supportano il Oggetto JSON look here.. Una breve risposta generica - praticamente tutti i browser che contano davvero nell'anno 2013+.

Problemi correlati