我已经看到了一些浏览器通过window.JSON
对象安全有效地支持JSON解析/序列化对象的引用,但细节很难实现。任何人都可以指出正确的方向吗?这个Object暴露的方法是什么?它支持哪些浏览器?浏览器原生JSON支持(window.JSON)
回答
所有现代浏览器都支持本机JSON编码/解码(Internet Explorer 8+,Firefox 3.1 +,Safari 4+和Chrome 3+)。基本上,将解析str
中的JSON字符串并返回一个对象,而JSON.stringify(obj)
将返回对象obj
的JSON表示。
有关MDN article的更多详细信息。
我知道支持并不普遍,但使用这种方法应该比eval()更快更安全,因此我想在可用的地方使用它。任何想法支持其他浏览器? – levik 2009-05-21 03:53:50
我没有说不使用它,我说不要指望它。肯定检查它是否可用(在这一点上只有IE8和少数Fx Beta用户)并使用它,但我只是说你不应该假设浏览器支持它。到目前为止,这两个是唯一支持它的浏览器,WebKit现在正在开发它,所以很快就可能会在Google Chrome和Safari中使用它。 – 2009-05-21 04:00:25
使用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。
如果不是,解析自己。
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,
对于任何人的谁运行到这个线程的好处 - 为浏览器的跟上时代的,明确的清单支持JSON对象look here.。一个简短的通用答案 - 几乎所有浏览器在2013+年都非常重要。
- 1. 移动浏览器支持原生JSON对象
- 2. 浏览器支持
- 3. 浏览器支持WebDriver还是WebDriver支持浏览器
- 4. window.devicePixelRatio浏览器支持
- 5. 浏览器支持sencha touch
- 6. Kurento浏览器/ webRTC支持
- 7. Ember.js浏览器支持?
- 8. document.fileSize浏览器支持
- 9. 浏览器字体支持
- 10. Robot Framework浏览器支持
- 11. Android iFrame浏览器支持
- 12. Scaja.js浏览器支持
- 13. XML跨浏览器支持
- 14. 边缘浏览器支持
- 15. ngAria支持Safari浏览器
- 16. 跨浏览器支持jQuery
- 17. 浏览器支持“e.target.files”
- 18. 与Android原生浏览器
- 19. Gecko支持的浏览器和Webkit支持的浏览器有什么区别?
- 20. iOS中的原生JSON支持?
- 21. Javascript:哪个浏览器支持原型继承?
- 22. C#WinForm Web浏览器不支持的浏览器
- 23. 如何检测浏览器是否支持webkit浏览器?
- 24. 检测短信:浏览器支持浏览器
- 25. 用于多浏览器支持的CSS生成器
- 26. 黑莓:从嵌入式浏览器启动原生浏览器
- 27. 哪些浏览器支持HttpOnly cookies?
- 28. 对JavaScript版本的浏览器支持
- 29. 哪些浏览器支持HTML5 History API?
- 30. Windows Phone 7浏览器支持HTML 5
有关本机支持[JSON对象](http://ecma262-5.com/ELS5_Section_15)的浏览器信息,请参见[何时可以使用JSON解析?](http://caniuse.com/json)。 HTM#Section_15.12)。 – outis 2011-12-26 09:38:21