关于javascript:浏览器本机JSON支持(window.JSON)

Browser-native JSON support (window.JSON)

我看到过一些本机支持通过window.JSON对象安全有效地对对象进行JSON解析/序列化的浏览器的引用,但是很难获得详细信息。有人能指出正确的方向吗?这个对象公开的方法是什么?它支持哪些浏览器?


所有现代浏览器都支持本机JSON编码/解码(Internet Explorer 8+、Firefox 3.1+、Safari 4+和Chrome 3+)。基本上,JSON.parse(str)将解析str中的json字符串并返回一个对象,JSON.stringify(obj)将返回对象obj的json表示。

有关MDN文章的更多详细信息。


jquery-1.7.1.js-555行…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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 = /"[^"\\

]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,

rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,


使用json2.js的好处是,只有在浏览器还没有解析器的情况下,它才会安装解析器。您可以保持与旧浏览器的兼容性,但如果可用,可以使用本机JSON解析器(它更安全、更快)。

具有本机JSON的浏览器:

  • IE8+
  • 火狐3.1+
  • Safari 4.0.3版+
  • 歌剧10.5+

G.


[扩展MusicFreak评论]

如果使用jquery,请使用parsejson

1
var obj = jQuery.parseJSON(data)

在内部,它检查浏览器是否支持.json.parse,并且(如果可用)调用本机window.json.parse。

如果没有,则不分析自身。


为了让任何一个运行这个线程的人受益——要获得支持JSON对象的最新的、确定的浏览器列表,请看这里。一个简单的通用答案——几乎所有的浏览器在2013年都很重要。