web-dev-qa-db-fra.com

Prise en charge JSON native du navigateur (window.JSON)

J'ai vu des références à certains navigateurs prenant en charge nativement l'analyse et la sérialisation JSON d'objets de manière sûre et efficace via le window.JSON Objet, mais les détails sont difficiles à trouver. Quelqu'un peut-il pointer dans la bonne direction? Quelles sont les méthodes exposées par cet objet? Sous quels navigateurs est-il pris en charge?

92
levik

Tous les navigateurs modernes prennent en charge le codage/décodage JSON natif (Internet Explorer 8+, Firefox 3.1+, Safari 4+ et Chrome 3+). Fondamentalement, JSON.parse(str) analysera le Chaîne JSON dans str et retourne un objet, et JSON.stringify(obj) renverra la représentation JSON de l'objet obj.

Plus de détails sur article MDN .

109
Sasha Chedygov

jQuery-1.7.1.js - ligne 555 ...

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,
30
lks

L'avantage d'utiliser json2.js est qu'il n'installera un analyseur que si le navigateur n'en a pas déjà un. Vous pouvez conserver la compatibilité avec les anciens navigateurs, mais utilisez l'analyseur natif JSON (qui est plus sécurisé et plus rapide) s'il est disponible.

Navigateurs avec Native JSON:

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

G.

12
Gak

[é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 disponible) appelle la fenêtre native.JSON.parse.

Sinon, se analyse.

10
Michael Freidgeim

Pour le bénéfice de tous ceux qui rencontrent ce fil - pour une liste à jour et définitive des navigateurs qui prennent en charge l'objet JSON regardez ici. . Une brève réponse générique - à peu près tous les navigateurs qui comptent vraiment pour l'année 2013+.

8
DroidOS