浏览器原生 JSON 支持 (window.JSON)

IT技术 javascript json browser
2021-01-12 00:44:09

我已经看到一些浏览器的引用,这些浏览器通过window.JSONObject安全有效地支持对象的 JSON 解析/序列化,但细节很难获得。任何人都可以指出正确的方向吗?这个对象公开的方法是什么?支持哪些浏览器?

5个回答

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

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

作为参考,当您说“NEVER eval() ...”然后提到 json2 是广受支持的库时,值得注意的是它确实使用了 eval,但它尝试首先使用正则表达式验证字符串。这比验证和解析字符串要快,尽管有些解析器无法以可比的性能进行验证。json2.js 仍然可能是最好的选择,即使只是因为它的普遍性。
2021-03-20 00:44:09
@colbeerhey:是的,这是我最常看到的。你也可以窃取 jQuery 的。
2021-03-27 00:44:09
我知道这种支持并不普遍,但使用这种方法应该比 eval() 一个字符串更快、更安全,所以我想在它可用的地方使用它。对其他浏览器的支持有什么想法吗?
2021-04-01 00:44:09
哦,顺便说一句,永远不要 eval() JSON 字符串。相反,使用许多可用的 JSON 解析库之一。
2021-04-10 00:44:09
@TheXenocide:好点,但它的作者可能在验证代码上花费了大量时间,所以我说永远不要使用eval()JSON 字符串,因为你将重新发明轮子,而且很可能会出错。
2021-04-11 00:44:09

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,
更像是查看 jQuery 内部的参数 =)
2021-03-23 00:44:09
好的。使用 jQuery 的好论据。
2021-04-02 00:44:09

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

具有原生 JSON 的浏览器:

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

G。

[扩展musicfreak评论]

如果您使用 jQuery,请使用parseJSON

var obj = jQuery.parseJSON(data)

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

如果不是,则解析自身。

为了任何遇到此线程的人的利益 - 有关支持 JSON 对象的最新、明确的浏览器列表,请查看此处。. 一个简短的通用答案 - 几乎所有在 2013 年以后真正重要的浏览器。