2012-04-28 87 views
76

JSON.parse是執行相同的任務兩種功能。如果jQuery庫已經加載,就性能而言,使用jQuery.parseJSON會比使用JSON.parse更好嗎?jQuery.parseJSON VS JSON.parse

如果是,爲什麼?如果不是,爲什麼不呢?

+1

我認爲JSON.parse在舊版瀏覽器中不適用。就速度而言,它們應該是相同的,JSON.parse應該更快一些(我認爲jQuery在較新的瀏覽器中使用JSON.parse)。 – 2012-04-28 09:33:00

回答

108

下面是摘錄from 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

哇,很好的答案!謝謝大家,我認爲你是最全面的答案。 – 2012-04-28 09:39:47

+0

根據json的來源,可能存在安全問題。 – 2012-04-28 09:41:02

+0

rvalidchars.test的東西應該會捕獲無效的JSON;所以這看起來很安全。 – Daniel 2012-11-28 17:52:13

10

According to jQuery

當瀏覽器提供了一個原生實現JSON.parse的,jQuery使用它來解析字符串。

從而意味着jQuery提供一個JSON解析器如果在瀏覽器不存在本地實現。 here's a comparison chart具有(並沒有)JSON功能的瀏覽器

+0

所以我猜對了,甚至不知道jQuery;)。 – 2012-04-28 09:35:11

+0

感謝您提供豐富的圖表:) – 2012-04-28 09:41:25

3

我不知道性能,但它使用jQuery方法肯定更安全,因爲ie7和更低版本的某些瀏覽器本地可能沒有任何JSON功能。
這是所有關於兼容性,就像你使用jQuery的每一個方法,而不是數組的迭代本地forEach方法。

+0

IE8支持JSON。 – RiZKiT 2014-10-27 10:51:18

+0

你是對的。謝謝。更新了答案 – 2015-01-09 08:26:44

+0

我總是用JSON.parse(日期),因爲我從來沒有支持IE8- 和更少的字符超過$ .parseJSON()^ _^ 對於IE8-讓我們用這樣 <! - [如果lt IE 8]> xicooc 2015-01-16 03:35:55

6

JSON.parse()本身在某些瀏覽器上可用,而不是在其他瀏覽器上可用,所以使用庫更安全。正如其他受訪者指出的那樣,JQuery的實施效果很好。還有Douglas Crockford's JSON library,它使用本地實現(如果可用)。

的JSON庫有它把一個JavaScript對象成JSON字符串,這是從jQuery的缺失目前的方法的優點..

+0

最好的答案,因爲它表明爲什麼道格拉斯克羅克福德的JSON庫仍然是必要的。 – 2016-02-05 22:59:15

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 +(通常,不推薦)。

4

如果您使用的是jQuery 3.0+,那麼您應該使用JSON.parse,因爲jQuery.parseJSON已被棄用。

從jQuery 3.0開始,不推薦使用$ .parseJSON。要解析JSON對象,請改用本機JSON.parse方法。

1

jQuery的內部使用JSON.parse解析JSON file.So它不會使在大多數情況下任何區別。

但是一些舊瀏覽器不支持JSON.parse功能。在這種情況下,使用jQuery.parseJSON是有益的,因爲jQuery可以使用自己的函數處理JSON。

注:

jQuery.parseJSON從jQuery的3.0.So棄用,請使用本地JSON.parse方法。