javascript parseJSON

解析json:

前台和后台做ajax交互,后台返回的json字符串,我之前都是通过eval来解析,后来慢慢的知道eval这货是魔鬼eval要尽量避免,是出于安全考虑,因为eval过于强大,他可以把string串作为代码执行。如果控制不好就会造成安全漏洞。

所以ECMA推出了JSON.parse,通过这个名字大概可以看出这货是用来解析json的,JSON.parse详细介绍请参考这个地址:http://technet.microsoft.com/zh-cn/sysinternals/cc836466%28en-us,VS.85%29.aspx,通过API可以看到JSON.parse在IE6,7下是不兼容的。

 

解决兼容:

刚刚提到了JSON.parse在IE6,7下是不兼容,解决办法如下:

解决办法1:可以通过引入json2.js一个文件,json2.js下载及插件详细介绍请参考这个地址:http://www.cnblogs.com/youring2/archive/2013/03/01/2938850.html。

解决办法2:众所周知jQueryAPI里有一个parseJSON方法,parseJSON也是用来解析json字符串的,具体的我就不多做介绍了,如有没见过的同学可以去看一下jQueryAPI,我去看了一下parseJSON源码,看了之后借鉴parseJSON源码,写了一个解析json函数,先看一下运行结果吧:

javascript parseJSONIE7下妥妥的,由于我这里没有IE6,有IE6的同学可以自己去测试,下面给给大家上代码:

var parseJSON = function(data){

    

    var rValidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,  

        rValidchars = /^[\],:{}\s]*$/,

        rValidbraces = /(?:^|:|,)(?:\s*\[)+/g,

        rValidescape = rValidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;

    if(window.JSON && window.JSON.parse){

        return window.JSON.parse(data);

    }

    if ( rValidchars.test( data.replace( rValidescape, '@' )

        .replace( rValidtokens, ']' )

        .replace( rValidbraces, '')) ) {



        return (new Function( 'return ' + data ))();

    }

    

}

var str = '{"name":"carl","age":"24","sex":"man"}';

var obj = parseJSON(str);

alert(obj.name);

如果什么不对的地方,欢迎大家积极拍砖指导!

你可能感兴趣的:(JavaScript)