解析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);
如果什么不对的地方,欢迎大家积极拍砖指导!