jQuery.parseJSON проти JSON.parse


79

jQuery.parseJSONі JSON.parseє двома функціями, які виконують одне і те ж завдання. Якщо бібліотека jQuery вже завантажена, чи буде використання jQuery.parseJSONкраще, ніж використання JSON.parse, з точки зору продуктивності?

Якщо так, чому? Якщо ні, чому ні?


1
Я думаю, що JSON.parse недоступний у старих браузерах. Що стосується швидкості, вони повинні бути однаковими, JSON.parse повинен бути трохи швидшим (я думаю, jQuery використовує JSON.parse в нових браузерах).

Відповіді:


112

Ось витяг з 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 );
},

Як бачите, jQuery використовуватиме власний JSON.parseметод, якщо він доступний, і в іншому випадку він намагатиметься оцінити дані за допомогою new Function, що приблизно нагадує eval.

Так що так, вам неодмінно слід скористатися jQuery.parseJSON.


3
Ого, чудові відповіді! Дякую всім, я думаю, що ваша - найбільш вичерпна відповідь.
Переповнення запитання

Залежно від того, звідки походить ваш json, із запасним методом 'eval' можуть виникнути проблеми із безпекою.
Steve Mayne

Матеріали rvalidchars.test повинні ловити недійсний JSON; так що це виглядає досить безпечно.
Даніель

6
Зверніть увагу, що це старий код, і порожній рядок більше не повертатиме значення null. Натомість він видасть помилку.
mlissner

3
Так, я думаю, що цю відповідь слід оновити, щоб стверджувати, що майже не потрібно використовувати для цього велику бібліотеку, як jQuery. Звіт Збирається Джозеф посилання сновидіння , щоб показати прийняття браузера на JSON.parse: caniuse.com/#search=json
Hulvej

10

Відповідно до jQuery

Якщо браузер забезпечує власну реалізацію JSON.parse, jQuery використовує його для синтаксичного аналізу рядка.

отже, це означає, що jQuery надає синтаксичний аналізатор JSON, якщо в браузері не існує власної реалізації. ось таблиця порівняння браузерів, які мають (і не мають) функціональність JSON


6

JSON.parse () доступний у деяких браузерах, а не в інших, тому безпечніше користуватися бібліотекою. Як зазначають інші респонденти, реалізація JQuery працює добре. Існує також бібліотека JSON Дугласа Крокфорда , яка використовує власну реалізацію, якщо така є.

Перевага бібліотеки JSON полягає в тому, що вона має спосіб перетворити об’єкт JavaScript на рядок JSON, який на даний момент відсутній у jQuery.


Найкраща відповідь, оскільки вона вказує, чому бібліотека JSON Дугласа Крокфорда все ще необхідна.
Натан Мойнвазірі,

6

Якщо ви використовуєте jQuery версії 3 (випущена в 2016 році), тоді вам слід використовувати, JSON.parse()оскільки jQuery.parseJSON() вона застаріла .

Станом на jQuery 3.0, $ .parseJSON застаріло. Щоб проаналізувати об'єкти JSON, використовуйте натомість власний метод JSON.parse.


3

Я не знаю про продуктивність, але, безумовно, безпечніше використовувати метод jQuery, оскільки деякі браузери, такі як ie7 і старіші, можуть не мати жодних функцій JSON.
Вся справа в сумісності, подібно до того, як ви використовуєте кожен метод jQuery замість власного forEachметоду масиву для ітерації.


Я завжди використовую JSON.parse (дата), тому що я ніколи не підтримую IE8 - і менше символів, ніж $ .parseJSON () ^ _ ^ Для IE8 - давайте використовуватимемо це <! - [якщо lt IE 8]> <мета http- equiv = "Refresh" content = "0; url = / error-browser.html"> <! [endif] ->
xicooc

2

Якщо говорити про продуктивність , то найостанніша відповідь така JSON.parse.

Вбудований об'єкт JSON сьогодні підтримується в кожному браузері , тому обирайте JSON.parse. Ви можете побачити таблицю підтримки тут: http://caniuse.com/#feat=json

Ви також можете шукати такі псевдоніми у сховищі JQuery на GitHub: https://github.com/jquery/jquery/search?utf8=%E2%9C%93&q=parseJSON

Крім того , jQuery.parseJsonбув застарілим за версією 3.0+ , як говорили інші відповіді тут.

Ви повинні використовувати версію jQuery лише у тому випадку, якщо ви є старою версією JQuery +, якщо ви хочете надати підтримку дуже старим браузерам (як правило, не рекомендується ).


1

jQuery внутрішньо використовує JSON.parseдля синтаксичного аналізу файлу JSON, тому в більшості випадків це не робить різниці.

Але деякі старі браузери не підтримують JSON.parseфункціональність, і в цьому випадку використання jQuery.parseJSONкорисно, оскільки jQuery може обробляти JSON за допомогою власної функції.

ПРИМІТКА:

jQuery.parseJSONзастаріло від jQuery 3.0, тому, будь ласка, використовуйте власний JSON.parseметод.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.