jQuery.parseJSON vs JSON.parse

79

jQuery.parseJSONund JSON.parsesind zwei Funktionen, die dieselbe Aufgabe ausführen. Wenn die jQuery-Bibliothek bereits geladen ist, ist die Verwendung in Bezug auf die Leistung jQuery.parseJSONbesser als die Verwendung JSON.parse?

Wenn ja, warum? Wenn nein, warum nicht?

Fragenüberlauf
quelle
1
Ich denke, JSON.parse ist in alten Browsern nicht verfügbar. In Bezug auf die Geschwindigkeit sollten sie identisch sein, JSON.parse sollte etwas schneller sein (ich denke, jQuery verwendet JSON.parse in neueren Browsern).

Antworten:

112

Hier ist ein Auszug aus jQuery 1.9.1 :

parseJSON: function( data ) {
    // Attempt to parse using the native JSON parser first
    if ( window.JSON && window.JSON.parse ) {
        return window.JSON.parse( data );
    }

    if ( data === null ) {
        return data;
    }

    if ( typeof data === "string" ) {

        // Make sure leading/trailing whitespace is removed (IE can't handle it)
        data = jQuery.trim( data );

        if ( 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 );
},

Wie Sie sehen können, verwendet jQuery die native JSON.parseMethode, wenn sie verfügbar ist, und versucht andernfalls, die Daten mit auszuwerten new Function, was ähnlich ist eval.

Also ja, du solltest es definitiv benutzen jQuery.parseJSON.

dfsq
quelle
3
Wow, tolle Antworten! Vielen Dank an alle, ich denke, Ihre ist die umfassendste Antwort.
Frage Überlauf
Abhängig davon, woher Ihr JSON stammt, kann es bei der Fallback-Methode "eval" zu Sicherheitsproblemen kommen.
Steve Mayne
Das rvalidchars.test-Zeug sollte ungültigen JSON abfangen. Das sieht also ziemlich sicher aus.
Daniel
6
Beachten Sie, dass dies alt ist und eine leere Zeichenfolge nicht mehr null zurückgibt. Es wird stattdessen ein Fehler ausgegeben.
mlissner
3
Ja, ich denke, diese Antwort sollte aktualisiert werden, um festzustellen, dass es fast unnötig ist, dafür eine große Bibliothek wie jQuery zu verwenden. Ich werde den Link von Joseph dem Träumer melden, um die Browser-Übernahme von zu zeigen JSON.parse: caniuse.com/#search=json
Hulvej
10

Laut jQuery

Wenn der Browser eine native Implementierung von JSON.parse bereitstellt, verwendet jQuery diese, um die Zeichenfolge zu analysieren.

Dies bedeutet, dass jQuery einen JSON-Parser bereitstellt, wenn im Browser keine native Implementierung vorhanden ist. Hier ist eine Vergleichstabelle von Browsern mit (und ohne) JSON-Funktionalität

Joseph
quelle
6

JSON.parse () ist in einigen Browsern nativ verfügbar, in anderen nicht. Daher ist es sicherer, eine Bibliothek zu verwenden. Die JQuery-Implementierung funktioniert gut, wie andere Befragte festgestellt haben. Es gibt auch die JSON-Bibliothek von Douglas Crockford , die die native Implementierung verwendet, sofern verfügbar.

Die JSON-Bibliothek hat den Vorteil, dass sie über eine Methode verfügt, mit der ein JavaScript-Objekt in eine JSON-Zeichenfolge umgewandelt werden kann, die derzeit in jQuery fehlt.

leifbennett
quelle
Beste Antwort, weil sie angibt, warum die JSON-Bibliothek von Douglas Crockford immer noch erforderlich ist.
Nathan Moinvaziri
6

Wenn Sie jQuery Version 3 (veröffentlicht im Jahr 2016) verwenden, sollten Sie verwenden, JSON.parse()da jQuery.parseJSON() dies veraltet ist .

Ab jQuery 3.0 ist $ .parseJSON veraltet. Verwenden Sie zum Parsen von JSON-Objekten stattdessen die native Methode JSON.parse.

Khuram Khan
quelle
3

Ich weiß nichts über die Leistung, aber es ist definitiv sicherer, die jQuery-Methode zu verwenden, da einige Browser wie ie7 und niedriger möglicherweise keine nativen JSON-Funktionen haben.
Es geht um Kompatibilität, genau wie Sie jede Methode von jQuery anstelle der nativen forEachMethode des Arrays für die Iteration verwenden.

gion_13
quelle
Ich verwende immer JSON.parse (Datum), weil ich niemals IE8- und weniger Zeichen als $ .parseJSON () unterstütze. ^ _ ^ Für IE8- verwenden wir folgendes <! - [wenn IE 8]> <meta http- equiv = "Refresh" content = "0; url = / error-browser.html"> <! [endif] ->
xicooc
2

Apropos Leistung : Die aktuellste Antwort lautet JSON.parse.

Das native JSON - Objekt wird unterstützt in jedem Browser heutzutage, so entscheidet sich für JSON.parse. Die Support-Tabelle finden Sie hier: http://caniuse.com/#feat=json

Sie können diesen Alias ​​auch im JQuery-Repository auf GitHub suchen: https://github.com/jquery/jquery/search?utf8=%E2%9C%93&q=parseJSON

Auch jQuery.parseJsonwurde auf Version 3.0+ veraltet, wie in anderen Antworten hier erwähnt.

Sie sollten die Version von jQuery nur verwenden, wenn Sie eine alte JQuery-Version + sind, wenn Sie Unterstützung für sehr alte Browser bereitstellen möchten (normalerweise nicht empfohlen ).

Giovannipds
quelle
1

jQuery wird intern JSON.parsezum Parsen der JSON-Datei verwendet. In den meisten Fällen macht dies keinen Unterschied.

Einige der älteren Browser unterstützen jedoch keine JSON.parseFunktionen. In diesem Fall ist die Verwendung von jQuery.parseJSONVorteil, da jQuery JSON mit seiner eigenen Funktion verarbeiten kann.

HINWEIS:

jQuery.parseJSONist von jQuery 3.0 veraltet. Verwenden Sie daher bitte die native JSON.parseMethode.

Siva Prakash
quelle