我已经看到一些浏览器的引用,这些浏览器通过window.JSON
Object安全有效地支持对象的 JSON 解析/序列化,但细节很难获得。任何人都可以指出正确的方向吗?这个对象公开的方法是什么?支持哪些浏览器?
浏览器原生 JSON 支持 (window.JSON)
IT技术
javascript
json
browser
2021-01-12 00:44:09
5个回答
所有现代浏览器都支持原生 JSON 编码/解码(Internet Explorer 8+、Firefox 3.1+、Safari 4+ 和 Chrome 3+)。基本上,JSON.parse(str)
将解析 JSON 字符串str
并返回一个对象,JSON.stringify(obj)
并将返回对象的 JSON 表示obj
。
有关MDN 文章的更多详细信息。
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,
使用 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 年以后真正重要的浏览器。