Json字符串转换为JS对象的高效方法实例


Posted in Javascript onMay 01, 2013

今天学习JQuery源码看到一下方法,原来还可以这样解析JSON字符串:

  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 );
  // Make sure the incoming data is actual JSON
  // Logic borrowed from http://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, "")) ) {
   // Try to use the native JSON parser first
   return window.JSON && window.JSON.parse ?
    window.JSON.parse( data ) :
    (new Function("return " + data))();
  } else {
   jQuery.error( "Invalid JSON: " + data );
  }
 }

这个方法核心的代码就是:
(new Function("return " + data))();

它使用了Function()构造函数。讲json字符串作为函数执行数据传入,定义后立即执行该函数,此时这个函数会返回JSON对象

我做了一个测试,用这个方法解析JSON字符串的效率要比用Eval解析快好几百倍

var jsonStr ="{";
for(var i=0;i<10000;i++){
 jsonStr+="a"+i+":"+i+","
}
jsonStr = jsonStr.substring(0,jsonStr.length-1);
jsonStr+="}";
var date = new Date();
var start = date.getTime()
//var boj = (new Function("return "+jsonStr ))();
var boj = eval("("+jsonStr+")");
var date1 = new Date();
console.info(date1.getTime()-start);

我用firfox测试结果,用eval解析花费了7234毫秒,而用函数这种方法,用了55毫秒,太神奇了.
Javascript 相关文章推荐
JavaScript 拾碎[三] 使用className属性
Oct 16 Javascript
java、javascript实现附件下载示例
Aug 14 Javascript
45个JavaScript编程注意事项、技巧大全
Feb 11 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
Mar 18 Javascript
JavaScript中的fontsize()方法使用详解
Jun 08 Javascript
JavaScript获取各大浏览器信息图示
Nov 20 Javascript
Bootstrap富文本组件wysiwyg数据保存到mysql的方法
May 09 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
Jul 18 Javascript
vue实现登陆登出的实现示例
Sep 15 Javascript
利用Javascript获取选择文本所在的句子详解
Dec 03 Javascript
微信小程序纯文本实现@功能
Apr 08 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
Jul 24 Javascript
Jquery post传递数组方法实现思路及代码
Apr 28 #Javascript
javascript中的onkeyup和onkeydown区别介绍
Apr 28 #Javascript
JQuery中如何传递参数如click(),change()等具体实现
Apr 28 #Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
Apr 28 #Javascript
JS中setInterval、setTimeout不能传递带参数的函数的解决方案
Apr 28 #Javascript
jquery在IE、FF浏览器的差别详细探讨
Apr 28 #Javascript
js自动下载文件到本地的实现代码
Apr 28 #Javascript
You might like
多文件上载系统完整版
2006/10/09 PHP
php中的时间显示
2007/01/18 PHP
ThinkPHP与PHPExcel冲突解决方法
2011/08/08 PHP
php使用正则过滤js脚本代码实例
2014/05/10 PHP
Yii入门教程之目录结构、入口文件及路由设置
2014/11/25 PHP
php获取文件名后缀常用方法小结
2015/02/24 PHP
thinkPHP分组后模板无法加载问题解决方法
2016/07/12 PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
2020/05/29 PHP
javascript实现二分查找法实现代码
2007/11/12 Javascript
九种js弹出对话框的方法总结
2013/03/12 Javascript
Jquery在指定DIV加载HTML示例代码
2014/02/17 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
2015/12/02 Javascript
vue router路由嵌套不显示问题的解决方法
2017/06/17 Javascript
Vue组件实例间的直接访问实现代码
2017/08/20 Javascript
Vue实现动态创建和删除数据的方法
2018/03/17 Javascript
微信小程序之分享页面如何返回首页的示例
2018/03/28 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
Vue的生命周期操作示例
2019/09/17 Javascript
Python简单删除目录下文件以及文件夹的方法
2015/05/27 Python
Python提取特定时间段内数据的方法实例
2019/04/01 Python
Python安装whl文件过程图解
2020/02/18 Python
Python爬虫之Selenium下拉框处理的实现
2020/12/04 Python
美国酒店控股公司:Choice Hotels
2018/06/15 全球购物
别名指示符是什么
2012/10/08 面试题
生物制药毕业生自荐信
2013/10/16 职场文书
工商管理专业职业生涯规划
2014/01/01 职场文书
活动总结怎么写
2014/04/28 职场文书
多媒体教室标语
2014/06/26 职场文书
教师批评与自我批评(群众路线)
2014/10/15 职场文书
场地使用证明模板
2014/10/25 职场文书
2015年医药代表工作总结
2015/04/25 职场文书
团队合作精神学习心得体会
2016/01/19 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书
用Python可视化新冠疫情数据
2022/01/18 Python