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

 更新时间:2013年05月01日 14:20:26   作者:  
一般JSON字符串转换为JS对象,都使用var jsonStr="{a:1}";var jsonObj = eval("("+jsonStr+")");

今天学习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毫秒,太神奇了.

相关文章

  • js实现仿Discuz文本框弹出层效果

    js实现仿Discuz文本框弹出层效果

    这篇文章主要介绍了js实现仿Discuz文本框弹出层效果的方法,可实现点击文本框弹出窗口选择数据的效果,涉及鼠标事件及页面自定义弹出窗口的相关操作技巧,需要的朋友可以参考下
    2015-08-08
  • JavaScript实现九宫格点击变色效果

    JavaScript实现九宫格点击变色效果

    这篇文章主要为大家详细介绍了JavaScript实现九宫格点击变色效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • JavaScript实现弹性导航效果

    JavaScript实现弹性导航效果

    这篇文章主要为大家详细介绍了JavaScript实现弹性导航效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Bootstrap基本插件学习笔记之模态对话框(16)

    Bootstrap基本插件学习笔记之模态对话框(16)

    这篇文章主要为大家详细介绍了Bootstrap基本插件学习笔记之模态对话框的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • javascript 一些用法小结

    javascript 一些用法小结

    JavaScript的一些用法总结
    2009-09-09
  • JS获得多个同name 的input输入框的值的实现方法

    JS获得多个同name 的input输入框的值的实现方法

    这篇文章主要介绍了基于JS代码实现input密码输入框输入密码变黑点密文以及JS获得多个同name 的input输入框的值的实现方法,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友参考下
    2017-01-01
  • JS中几种实用的跨域方法原理详解

    JS中几种实用的跨域方法原理详解

    js跨域是指通过js在不同的域之间进行数据传输或通信,只要协议、域名、端口有任何一个不同,都被当作是不同的域,在这篇文章中讲给大家介绍一下js中几种实用的跨域方法原理,需要的朋友可以参考下
    2023-06-06
  • uploadify插件实现多个图片上传并预览

    uploadify插件实现多个图片上传并预览

    这篇文章主要为大家详细介绍了uploadify插件实现多个图片上传并预览,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • javascript原型模式用法实例详解

    javascript原型模式用法实例详解

    这篇文章主要介绍了javascript原型模式用法,以实例形式较为详细的分析了javascript原型模式的原理与使用技巧,需要的朋友可以参考下
    2015-06-06
  • JS判断移动端访问设备并加载对应CSS样式

    JS判断移动端访问设备并加载对应CSS样式

    JS判断不同web访问环境,主要针对移动设备,提供相对应的解析方案,本例是加载不同的css样式
    2014-06-06

最新评论