2009-05-21 79 views
87

我已經看到了一些瀏覽器通過window.JSON對象安全有效地支持JSON解析/序列化對象的引用,但細節很難實現。任何人都可以指出正確的方向嗎?這個Object暴露的方法是什麼?它支持哪些瀏覽器?瀏覽器原生JSON支持(window.JSON)

+8

有關本機支持[JSON對象](http://ecma262-5.com/ELS5_Section_15)的瀏覽器信息,請參見[何時可以使用JSON解析?](http://caniuse.com/json)。 HTM#Section_15.12)。 – outis 2011-12-26 09:38:21

回答

104

所有現代瀏覽器都支持本機JSON編碼/解碼(Internet Explorer 8+,Firefox 3.1 +,Safari 4+和Chrome 3+)。基本上,​​將解析str中的JSON字符串並返回一個對象,而JSON.stringify(obj)將返回對象obj的JSON表示。

有關MDN article的更多詳細信息。

+0

我知道支持並不普遍,但使用這種方法應該比eval()更快更安全,因此我想在可用的地方使用它。任何想法支持其他瀏覽器? – levik 2009-05-21 03:53:50

+0

我沒有說不使用它,我說不要指望它。肯定檢查它是否可用(在這一點上只有IE8和少數Fx Beta用戶)並使用它,但我只是說你不應該假設瀏覽器支持它。到目前爲止,這兩個是唯一支持它的瀏覽器,WebKit現在正在開發它,所以很快就可能會在Google Chrome和Safari中使用它。 – 2009-05-21 04:00:25

12

使用json2.js的優點是,如果瀏覽器還沒有安裝解析器,它將只安裝一個解析器。您可以保持與舊瀏覽器的兼容性,但如果可用,則使用本機JSON解析器(它更安全,速度更快)。

瀏覽器與本機JSON:

  • IE8 +
  • 火狐3.1+
  • 的Safari 4.0.3+
  • 歌劇10.5+

G.

10

[延伸musicfreak評論]

如果您正在使用jQuery,使用parseJSON

var obj = jQuery.parseJSON(data) 

內部,它會檢查,如果瀏覽器支持.JSON.parse,以及(如果可用)調用本地window.JSON.parse。

如果不是,解析自己。

29

jQuery的1.7.1.js - 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, 
8

對於任何人的誰運行到這個線程的好處 - 爲瀏覽器的跟上時代的,明確的清單支持JSON對象look here.。一個簡短的通用答案 - 幾乎所有瀏覽器在2013+年都非常重要。