zoukankan      html  css  js  c++  java
  • 扩展jQuery的json功能 潇湘

        用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(/(//|/")/g,"//$1").replace(//n|/r|/t/g,
           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);


    转自:http://irobot.blog.hexun.com/22901771_d.html

  • 相关阅读:
    Spring cloud实现服务注册及发现
    使用spring cloud实现分布式配置管理
    spring cloud教程之使用spring boot创建一个应用
    7天学会spring cloud教程
    微服务开发的12项要素
    一句话概括下spring框架及spring cloud框架主要组件
    翻译-服务注册与发现
    翻译-微服务API Gateway
    微服务分布式事务的一些思考
    解决不能正常访问workerman的问题
  • 原文地址:https://www.cnblogs.com/fengju/p/6173948.html
Copyright © 2011-2022 走看看