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 相关文章推荐
基于jquery的bankInput银行卡账号格式化
Aug 22 Javascript
js替换字符串的所有示例代码
Jul 23 Javascript
jQuery中设置form表单中action值的实现方法
May 25 Javascript
深入浅析JS的数组遍历方法(推荐)
Jun 15 Javascript
js基础之DOM中元素对象的属性方法详解
Oct 28 Javascript
Vue.js实现实例搜索应用功能详细代码
Aug 24 Javascript
javascript如何用递归写一个简单的树形结构示例
Sep 06 Javascript
使用clipboard.js实现复制功能的示例代码
Oct 16 Javascript
详解使用React进行组件库开发
Feb 06 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
Jun 22 Javascript
javascript实现弹出层效果
Dec 10 Javascript
vue实现购物车的监听
Apr 20 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
PHP聊天室技术
2006/10/09 PHP
从Web查询数据库之PHP与MySQL篇
2009/09/25 PHP
destoon出现验证码不显示时的紧急处理方法
2014/08/22 PHP
php接口实现拖拽排序功能
2018/04/23 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
如何从jQuery的ajax请求中删除X-Requested-With
2013/12/11 Javascript
jQuery拖拽div实现思路
2014/02/19 Javascript
JavaScript数值转换的三种方式总结
2014/07/31 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
Angular页面间切换及传值的4种方法
2016/11/04 Javascript
浅谈js原生拖放
2016/11/21 Javascript
详解如何使用webpack打包Vue工程
2017/05/27 Javascript
JS判断两个数组或对象是否相同的方法示例
2019/02/28 Javascript
详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案
2019/04/04 Javascript
JS桶排序的简单理解与实现方法示例
2019/11/25 Javascript
原生JavaScript实现贪吃蛇游戏
2020/11/04 Javascript
[01:02:26]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第二场 1月18日
2021/03/11 DOTA
Pyhton中防止SQL注入的方法
2015/02/05 Python
Python selenium 三种等待方式详解(必会)
2016/09/15 Python
从CentOS安装完成到生成词云python的实例
2017/12/01 Python
django中静态文件配置static的方法
2018/05/20 Python
学Python 3的理由和必要性
2019/11/19 Python
pytorch中的transforms模块实例详解
2019/12/31 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
2020/03/09 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
美国家居装饰店:Pier 1
2019/09/04 全球购物
司仪主持词两篇
2014/03/22 职场文书
会计专业自荐信
2014/06/03 职场文书
集中采购方案
2014/06/10 职场文书
2014年最新学校运动会广播稿
2014/09/17 职场文书
2015年党支部公开承诺书
2015/01/22 职场文书
学校中层领导培训心得体会
2016/01/11 职场文书
字典算法实现及操作 --python(实用)
2021/03/31 Python
《暗黑破坏神2:重制版》本周进行第一轮A测 目前可官网进行申请报名
2021/04/07 其他游戏
了解MySQL查询语句执行过程(5大组件)
2022/08/14 MySQL
Spring Boot实现文件上传下载
2022/08/14 Java/Android