博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[转]扩展jQuery的json功能

Posted on 2011-03-07 11:42  CodeNote  阅读(344)  评论(0编辑  收藏  举报
本文在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字符串的转换

View Code
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;
}
}
});

示例:

View Code
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);

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