- 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"
- }
- }