解析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函数,先看一下运行结果吧:
IE7下妥妥的,由于我这里没有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);
如果什么不对的地方,欢迎大家积极拍砖指导!