Browser-native JSON-Unterstützung (window.JSON)

92

Ich habe Verweise auf einige Browser gesehen, die die JSON-Analyse / Serialisierung von Objekten sicher und effizient über das window.JSONObjekt unterstützen, aber Details sind schwer zu finden. Kann jemand in die richtige Richtung zeigen? Welche Methoden stellt dieses Objekt bereit? Unter welchen Browsern wird es unterstützt?

Levik
quelle
8
Siehe Wann kann ich JSON-Parsing verwenden? Informationen zu Browsern mit nativer Unterstützung für das JSON-Objekt .
Outis

Antworten:

108

Alle modernen Browser unterstützen native JSON-Codierung / -Decodierung (Internet Explorer 8+, Firefox 3.1+, Safari 4+ und Chrome 3+). Grundsätzlich JSON.parse(str)wird die JSON-Zeichenfolge analysiert strund ein Objekt zurückgegeben, und JSON.stringify(obj)die JSON-Darstellung des Objekts wird zurückgegeben obj.

Weitere Details zum MDN-Artikel .

Sasha Chedygov
quelle
Ich weiß, dass die Unterstützung nicht weit verbreitet ist, aber die Verwendung dieser Methode sollte viel schneller und sicherer sein als das Auswerten () einer Zeichenfolge. Daher möchte ich sie dort verwenden, wo sie verfügbar ist. Irgendeine Idee zur Unterstützung durch andere Browser?
Levik
17
Oh, und nebenbei bemerkt, NIEMALS () JSON-Strings auswerten. Verwenden Sie stattdessen eine der vielen verfügbaren JSON-Analysebibliotheken.
Sasha Chedygov
1
@colbeerhey: Ja, das sehe ich am häufigsten. Sie könnten auch jQuery's stehlen.
Sasha Chedygov
2
Wenn Sie als Referenz "NIE eval () ..." sagen und dann erwähnen, dass json2 die im Volksmund unterstützte Bibliothek ist, sollten Sie beachten, dass eval verwendet wird, aber versucht wird, die Zeichenfolge zuerst mit Regex zu validieren. Dies ist schneller als das Validieren und Parsen der Zeichenfolge, obwohl es Parser gibt, die nicht mit vergleichbarer Leistung validieren. json2.js ist wahrscheinlich immer noch die beste Wahl, schon allein wegen seiner Verbreitung.
TheXenocide
2
@TheXenocide: Guter Punkt, aber sein Autor hat wahrscheinlich einen guten Teil seiner Zeit mit diesem Validierungscode verbracht, daher sage ich niemals eval()JSON-Zeichenfolgen, da Sie das Rad neu erfinden und es wahrscheinlich falsch verstehen werden.
Sasha Chedygov
30

jQuery-1.7.1.js - 555 Zeile ...

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,
lks
quelle
4
Nett. Gutes Argument für die Verwendung von jQuery.
OneWorld
11
Eher wie ein Argument, um in jQuery =) zu schauen
Olga
13

Der Vorteil der Verwendung von json2.js besteht darin, dass nur dann ein Parser installiert wird, wenn der Browser noch keinen hat. Sie können die Kompatibilität mit älteren Browsern beibehalten, verwenden jedoch den nativen JSON-Parser (der sicherer und schneller ist), sofern dieser verfügbar ist.

Browser mit nativem JSON:

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

G.

Gak
quelle
10

[Erweiterung des Musicfreak- Kommentars]

Wenn Sie jQuery verwenden, verwenden Sie parseJSON

var obj = jQuery.parseJSON(data)

Intern wird geprüft, ob der Browser .JSON.parse unterstützt, und (falls verfügbar) das native window.JSON.parse aufgerufen.

Wenn nicht, analysiert sich selbst.

Michael Freidgeim
quelle
8

Zum Nutzen aller, die auf diesen Thread stoßen - eine aktuelle, endgültige Liste der Browser, die das JSON-Objekt unterstützen , finden Sie hier. . Eine kurze allgemeine Antwort - so ziemlich alle Browser, die im Jahr 2013+ wirklich wichtig sind.

DroidOS
quelle