CSDN博客

img yuweiqiang

扩展jQuery的json功能

发表于2009/7/3 19:29:00  1272人阅读

分类: jquery

本文在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(/(//|/")/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);

阅读全文
0 0

相关文章推荐

img
取 消
img