J'ai vu des références à certains navigateurs qui supportent nativement l'analyse et la sérialisation JSON d'objets de manière sûre et efficace via la fonction window.JSON
Objet, mais les détails sont difficiles à trouver. Quelqu'un peut-il m'indiquer la bonne direction ? Quelles sont les méthodes exposées par cet objet ? Sous quels navigateurs est-il supporté ?
Réponses
Trop de publicités?Tous les navigateurs modernes prennent en charge l'encodage/décodage JSON en mode natif (Internet Explorer 8+, Firefox 3.1+, Safari 4+ et Chrome 3+). En principe, JSON.parse(str)
analysera la chaîne JSON dans str
et renvoie un objet, et JSON.stringify(obj)
renverra la représentation JSON de l'objet obj
.
Plus de détails sur la Article du MDN .
JQuery-1.7.1.js - 555 ligne...
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,
L'avantage d'utiliser json2.js est qu'il n'installera un analyseur que si le navigateur n'en possède pas déjà un. Vous pouvez maintenir la compatibilité avec les anciens navigateurs, mais utiliser l'analyseur JSON natif (qui est plus sûr et plus rapide) s'il est disponible.
Navigateurs avec JSON natif :
- IE8+
- Firefox 3.1+
- Safari 4.0.3+
- Opera 10.5+
G.
[étendre musicfreak commentaire]
Si vous utilisez jQuery, utilisez parseJSON
var obj = jQuery.parseJSON(data)
En interne, il vérifie si le navigateur prend en charge .JSON.parse, et (si c'est le cas) appelle la fonction native window.JSON.parse.
Si ce n'est pas le cas, il s'analyse lui-même.
Pour tous ceux qui tomberont sur ce fil de discussion - pour une liste définitive et à jour des navigateurs qui supportent l'objet JSON regardez ici. . Une brève réponse générique - à peu près tous les navigateurs qui comptent vraiment en 2013+.