92 votes

Prise en charge de JSON au niveau du navigateur (window.JSON)

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é ?

108voto

Sasha Chedygov Points 36783

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 .

30voto

lks Points 231

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,

13voto

Gak Points 121

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.

10voto

Michael Freidgeim Points 4002

[é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.

8voto

DroidOS Points 1321

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+.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X