Json字符串转换为JS对象的高效方法实例
今天学习JQuery源码看到一下方法,原来还可以这样解析JSON字符串:
parseJSON:function(data){
if(typeofdata!=="string"||!data){
returnnull;
}
//Makesureleading/trailingwhitespaceisremoved(IEcan"thandleit)
data=jQuery.trim(data);
//MakesuretheincomingdataisactualJSON
//Logicborrowedfromhttp://json.org/json2.js
if(/^[/],:{}/s]*$/.test(data.replace(///(?:["////bfnrt]|u[0-9a-fA-F]{4})/g,"@")
.replace(/"[^"///n/r]*"|true|false|null|-?/d+(?:/./d*)?(?:[eE][+/-]?/d+)?/g,"]")
.replace(/(?:^|:|,)(?:/s*/[)+/g,""))){
//TrytousethenativeJSONparserfirst
returnwindow.JSON&&window.JSON.parse?
window.JSON.parse(data):
(newFunction("return"+data))();
}else{
jQuery.error("InvalidJSON:"+data);
}
}
这个方法核心的代码就是:
(newFunction("return"+data))();
它使用了Function()构造函数。讲json字符串作为函数执行数据传入,定义后立即执行该函数,此时这个函数会返回JSON对象
我做了一个测试,用这个方法解析JSON字符串的效率要比用Eval解析快好几百倍
varjsonStr="{";
for(vari=0;i<10000;i++){
jsonStr+="a"+i+":"+i+","
}
jsonStr=jsonStr.substring(0,jsonStr.length-1);
jsonStr+="}";
vardate=newDate();
varstart=date.getTime()
//varboj=(newFunction("return"+jsonStr))();
varboj=eval("("+jsonStr+")");
vardate1=newDate();
console.info(date1.getTime()-start);
我用firfox测试结果,用eval解析花费了7234毫秒,而用函数这种方法,用了55毫秒,太神奇了.
相关文章
- 用JS获取地址栏url参数的方法_js的url是啥
- vue main.js中app绑定的是index.html还是App.vue中详解编程语言
- JS显示当前时间
- 妙用JS获取Oracle信息的快速方法(js获取Oracle)
- JS在Oracle中的应用(js如何oracle)
- 使用Oracle和JS开发新一代应用仿真世界(oracle js)
- js取得2008奥运金牌排名
- JSP页面中使用FCKeditor控件(js用法)
- 图片拼图记忆力测试游戏,网页+JS版
- js正则表达式讲解之index属性(RegExp对象)
- js复制到剪切板的实例方法
- 浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
- js实现json数据行到列的转换的实例代码
- JS检测图片大小的实例
- JS字符串截取函数实例
- js中settimeout方法加参数的使用实例
- JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
- node.js中的http.response.end方法使用说明
- node.js中的fs.fsync方法使用说明
- JS长整型精度问题实例分析
- js正则表达式中的单行模式与多行模式实例分析