当前位置:  开发笔记 > 编程语言 > 正文

浏览器本机JSON支持(window.JSON)

如何解决《浏览器本机JSON支持(window.JSON)》经验,为你挑选了5个好方法。

我已经看到一些浏览器本身通过window.JSONObject 安全有效地支持JSON解析/序列化对象的引用,但细节很难得到.谁能指出正确的方向?此对象公开的方法有哪些?它支持哪些浏览器?



1> Sasha Chedyg..:

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

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


哦,并且在旁注,从不eval()JSON字符串.相反,请使用许多可用的JSON解析库之一.
作为参考,当你说"NEVER eval()..."然后提到json2是受欢迎的库时,值得注意的是它确实使用了eval,但它尝试首先使用regex验证字符串.这比验证和解析字符串更快,尽管有些解析器没有以相当的性能进行验证.如果只是因为它的普遍性,json2.js仍然可能是最好的选择.
@TheXenocide:好点,但它的作者可能在验证代码上花了很多时间,所以我说'eval()`JSON字符串永远不会因为你将重新发明轮子而你可能会弄错它.

2> 小智..:

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中的参数=)
尼斯.使用jQuery的好参数.

3> 小智..:

使用json2.js的优点是,如果浏览器还没有解析器,它只会安装解析器.您可以保持与旧版浏览器的兼容性,但如果可用,则使用本机JSON解析器(更安全,更快).

使用Native JSON的浏览器:

IE8 +

Firefox 3.1+

Safari 4.0.3+

Opera 10.5+

G.



4> MiFreidgeim ..:

[扩展musicfreak评论]

如果您使用的是jQuery,请使用parseJSON

var obj = jQuery.parseJSON(data)

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

如果没有,会解析自己.



5> DroidOS..:

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

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有