Chinaunix首页 | 论坛 | 博客
  • 博客访问: 944769
  • 博文数量: 264
  • 博客积分: 10107
  • 博客等级: 上将
  • 技术积分: 2455
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-09 16:34
文章分类

全部博文(264)

文章存档

2012年(1)

2011年(11)

2010年(128)

2009年(82)

2008年(42)

我的朋友

分类: 系统运维

2010-07-22 16:12:52

扩展jQuery的json功能

关键字: javascript

本文在jQuery基础上扩展了其处理json字符串能力,伟大的jQuery将会更伟大,哈哈!

      用jQuery写javascript非常高效,jQuery对ajax的封装也非常到位;使用jQuery一段时间后发现,jQuery在处理json字符串方面功能不是很强,至少比prototype.js差远了,以前用习惯了prototype.js,在进行ajax开发时,处理json数据非常方便;而在jQuery中,只提供了一个简单的jQuery.getJSON()方法,并未提供jQuery本身对json数据的转换处理,将json字符串转换为javascript数据对象还比较容易利用eval()函数即可,但要将javascript的数据类型转换成json字符串就比较难了;刚开始不得同时使用prototype.js和jQuery,但由于著名的$符号函数,所以又不得不对jQuery进行一次转义,这样总究比较麻烦,而且prototype.js文件现在可不像以前那样小了,如果只是单纯的使用prototype.js的json处理功能,没有必要将其集成进来,为此本人对jQuery进行了一个简单的扩展,代码如下,只需要拷贝到你的代码中即可运行:

扩展代码://扩展jQuery对json字符串的转换
 jQuery.extend(
 {
  /**
   * @see  将json字符串转换为对象
   * @param   json字符串
   * @return 返回object,array,string等对象
   */
  evalJSON : function (strJson)
  {
   return eval( "(" + strJson + ")");
  }
 });
 jQuery.extend(
 {
  /**
   * @see  将javascript数据类型转换为json字符串
   * @param 待转换对象,支持object,array,string,function,number,boolean,regexp
   * @return 返回json字符串
   */
  toJSON : function (object)
  {
   var type = typeof object;
   if ('object' == type)
   {
    if (Array == object.constructor)
     type = 'array';
    else if (RegExp == object.constructor)
     type = 'regexp';
    else
     type = 'object';
   }
      switch(type)
   {
         case 'undefined':
       case 'unknown':
     return;
     break;
    case 'function':
       case 'boolean':
    case 'regexp':
     return object.toString();
     break;
    case 'number':
     return isFinite(object) ? object.toString() : 'null';
       break;
    case 'string':
     return '"' + object.replace(/(,
       function(){  
                 var a = arguments[0];                   
        return  (a == '\n') ? '\\n':  
                       (a == '\r') ? '\\r':  
                       (a == '\t') ? '\\t': "" 
             }) + '"';
     break;
    case 'object':
     if (object === null) return 'null';
        var results = [];
        for (var property in object) {
          var value = jQuery.toJSON(object[property]);
          if (value !== undefined)
            results.push(jQuery.toJSON(property) + ':' + value);
        }
        return '{' + results.join(',') + '}';
     break;
    case 'array':
     var results = [];
        for(var i = 0; i < object.length; i++)
     {
      var value = jQuery.toJSON(object[i]);
           if (value !== undefined) results.push(value);
     }
        return '[' + results.join(',') + ']';
     break;
      }
  }
 });

 

示例:

var obj = {
   name : "sean",
   friend : ["fans","bruce","wawa"],
   action : function(){alert("gogogog")},
   boy  : true,
   age : 26,
   reg : /\b([a-z]+) \1\b/gi,
   child : {
    name : "none",
    age : -1
   }
  };
  
  var json = $.toJSON(obj);
  var objx = $.evalJSON(json);

哈哈,不错吧,现在用起来舒服多了!

阅读(900) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

cj_gameboy2010-07-22 20:39:10

美女每天晚上都加班,佩服佩服,看来学有所成,把偶们都甩开一大截了,有空记得给偶们开开课啦