我已經看到了一些瀏覽器通過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. Ember.js瀏覽器支持?
- 5. 移動瀏覽器支持
- 6. Kurento瀏覽器/ webRTC支持
- 7. window.devicePixelRatio瀏覽器支持
- 8. Robot Framework瀏覽器支持
- 9. 瀏覽器支持「e.target.files」
- 10. XMLHttpRequest瀏覽器支持
- 11. Scaja.js瀏覽器支持
- 12. 跨瀏覽器支持jQuery
- 13. 爲 「//domain.com」 瀏覽器支持
- 14. XML跨瀏覽器支持
- 15. 邊緣瀏覽器支持
- 16. 瀏覽器支持sencha touch
- 17. 瀏覽器支持stopImmediatePropagation?
- 18. 瀏覽器不支持幀
- 19. document.fileSize瀏覽器支持
- 20. Android iFrame瀏覽器支持
- 21. ngAria支持Safari瀏覽器
- 22. @import的瀏覽器支持
- 23. document.implementation.createHTMLDocument瀏覽器支持?
- 24. .SVG瀏覽器支持
- 25. 如果瀏覽器支持
- 26. 瀏覽器字體支持
- 27. D3(SVG)瀏覽器支持
- 28. 原生瀏覽器注射
- 29. 與Android原生瀏覽器
- 30. 什麼瀏覽器不支持原生的forEach,過濾器,每一個等
有關本機支持[JSON對象](http://ecma262-5.com/ELS5_Section_15)的瀏覽器信息,請參見[何時可以使用JSON解析?](http://caniuse.com/json)。 HTM#Section_15.12)。 – outis 2011-12-26 09:38:21