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

将JavaScript对象转换成JSON字符串的方法,及JavaScript深度克隆方法
转自:http://snippets.dzone.com/posts/show/749

实现代码:

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" : [12345],   

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

 "obj" : {   

 "a" : "b"  

}   

}  

加支付宝好友偷能量挖...


评论(0)网络
阅读(125)喜欢(1)JavaScript/Ajax开发技巧