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)
risposta
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.
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
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. –
Oh, e su una nota a margine, MAI eval() stringhe JSON. Invece, utilizzare una delle tante librerie di analisi JSON disponibili. –
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.
[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.
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,
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+.
- 1. Supporto JSON nativo in iOS?
- 2. Supporto del browser Ember.js?
- 3. window.devicePixelRatio supporto del browser
- 4. .Cliccate(), il supporto del browser
- 5. Supporto del browser per stopImmediatePropagation?
- 6. Supporto http2 nativo di NodeJS
- 7. Supporto browser modulo layout CSS3
- 8. Supporto agli oggetti JSON nativi sui browser mobili
- 9. Supporto JSON nativo in MySQL 5.7: quali sono i pro e i contro del tipo di dati JSON in MYSQL?
- 10. . Supporto browser SVG
- 11. Rileva Javascript browser nativo Android
- 12. Supporto browser E4X
- 13. Supporto browser DocumentFragment
- 14. Supporto browser Trasparenza PNG
- 15. Supporto TSQL nativo per query parallele
- 16. AngularJS - cache del browser dati JSON
- 17. will_paginate il supporto JSON?
- 18. XMLHttpRequest: supporto browser per sendAsBinary?
- 19. Supporto Xpath nel mio browser?
- 20. Rilevamento del supporto del mouse
- 21. (Mobile) Supporto del browser per la condivisione di risorse incrociate?
- 22. HTML5 Drag and Drop eventi e setDragImage supporto del browser
- 23. jQuery controlla se la posizione di supporto del browser: fissa
- 24. Supporto del browser per il carattere jolly askerisk (*) nei CSS?
- 25. Rileva il supporto del browser per SVG animato
- 26. Come rilevare se il supporto del browser lampeggia?
- 27. Come verificare se il browser supporta l'attributo placeholder nativo?
- 28. Rileva supporto browser per HTML Media Capture
- 29. supporto di Windows nativo GSS-API in Java 6
- 30. Lingue con supporto grafico nativo/sintattico/in linea?
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