您的位置:首页 > Web前端 > JavaScript

JavaScript对象转换成JSON字符串及深度克隆方法

2011-11-01 11:06 1011 查看
Object.prototype.deep_clone = function(){

eval("var tmp = " + this.toJSON());

return tmp;

}

Object.prototype.toJSON = function(){

var json = [];

for(var i in this){

if(!this.hasOwnProperty(i)) continue;

//if(typeof this[i] == "function") continue;

json.push(

i.toJSON() + " : " +

((this[i] != null) ? this[i].toJSON() : "null")

)

}

return "{\n " + json.join(",\n ") + "\n}";

}

Array.prototype.toJSON = function(){

for(var i=0,json=[];i<this.length;i++)

json[i] = (this[i] != null) ? this[i].toJSON() : "null";

return "["+json.join(", ")+"]"

}

String.prototype.toJSON = function(){

return '"' +

this.replace(/(\\|\")/g,"\\$1")

.replace(/\n|\r|\t/g,function(){

var a = arguments[0];

return (a == '\n') ? '\\n':

(a == '\r') ? '\\r':

(a == '\t') ? '\\t': ""

}) +

'"'

}

Boolean.prototype.toJSON = function(){return this}

Function.prototype.toJSON = function(){return this}

Number.prototype.toJSON = function(){return this}

RegExp.prototype.toJSON = function(){return this}

// strict but slow

String.prototype.toJSON = function(){

var tmp = this.split("");

for(var i=0;i<tmp.length;i++){

var c = tmp[i];

(c >= ' ') ?

(c == '\\') ? (tmp[i] = '\\\\'):

(c == '"') ? (tmp[i] = '\\"' ): 0 :

(tmp[i] =

(c == '\n') ? '\\n' :

(c == '\r') ? '\\r' :

(c == '\t') ? '\\t' :

(c == '\b') ? '\\b' :

(c == '\f') ? '\\f' :

(c = c.charCodeAt(),('\\u00' + ((c>15)?1:0)+(c%16)))

)

}

return '"' + tmp.join("") + '"';

}

//测试

var json = {

str : "abcde",

num : 6,

reg : /foobar/i,

array : [1,2,3,4,5],

func : function(x,y){return x+y},

obj : {a : "b"}

}.toJSON();

alert(json);

// result

{

"str" : "abcde",

"num" : 6,

"reg" : /foobar/i,

"array" : [1, 2, 3, 4, 5],

"func" : function(x,y){return x+y},

"obj" : {

"a" : "b"

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: