`
dyllove98
  • 浏览: 1409460 次
  • 性别: Icon_minigender_1
  • 来自: 济南
博客专栏
73a48ce3-d397-3b94-9f5d-49eb2ab017ab
Eclipse Rcp/R...
浏览量:39188
4322ac12-0ba9-3ac3-a3cf-b2f587fdfd3f
项目管理checkList...
浏览量:80266
4fb6ad91-52a6-307a-9e4f-816b4a7ce416
哲理故事与管理之道
浏览量:133389
社区版块
存档分类
最新评论

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

阅读更多
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("") + '"';   
}  
分享到:
评论

相关推荐

    一行代码实现纯数据json对象的深度克隆实现思路

    1. 首先,`JSON.stringify()`将源对象转化为JSON字符串,这个过程会遍历对象的所有属性,包括嵌套的对象和数组。 2. 然后,`JSON.parse()`将这个字符串解析回一个新的JavaScript对象,这个新的对象与原对象在结构上...

    JSON解析和反解析源代码

    当一个JSON字符串需要转换成JavaScript对象时,JavaScript提供了`JSON.parse()`方法。例如,如果我们有一个JSON字符串`'{ "name": "John", "age": 30 }'`,我们可以用以下方式解析它: ```javascript let jsonString...

    javascript json框架

    在JavaScript中,内置的`JSON对象`提供了基本的JSON支持,包括`JSON.parse()`用于将JSON字符串转换为JavaScript对象,以及`JSON.stringify()`用于将JavaScript对象转换为JSON字符串。然而,某些情况下,我们可能需要...

    JS对象的深度克隆方法示例

    先将原始对象转换为JSON字符串,然后再将这个字符串解析为新的对象。这样可以实现深度克隆,但需要注意的是,这种方法不适用于包含函数、循环引用、`undefined`等非JSON兼容类型的对象。 ```javascript var ...

    JSON-JS-Master.zip

    在JavaScript中,我们可以使用`JSON.parse()`方法将一个JSON字符串转换为JavaScript对象,而`JSON.stringify()`方法则可以将JavaScript对象转换成JSON字符串。例如: ```javascript var jsonString = '{"name":...

    java json依赖包(完整直接可用版)

    例如,你可以将Java的HashMap、ArrayList等对象直接转换为JSON字符串,或者将JSON文本解析成Java对象,方便数据的序列化和反序列化。 2. **commons**:这可能指的是Apache Commons,一个包含大量Java工具类的项目,...

    JS对象深度克隆实例分析

    3. 当浏览器支持JSON时,使用`JSON.stringify(obj)`将对象转化为JSON字符串,再用`JSON.parse(str)`将字符串还原为新的对象。这种方法简单但有局限性,因为它无法处理函数、循环引用和某些特殊类型的对象。 4. 如果...

    JSON在基于Android的医护查房系统中的应用研究.pdf

    在实际应用中,开发者可以通过Fastjson的parseObject()和parseArray()方法将JSON字符串转化为Java对象或集合,反之,通过toJSONString()方法将Java对象转化为JSON字符串。此外,Fastjson还支持类型转换、深度克隆、...

    json数据组装

    组装JSON数据通常涉及创建一个JavaScript对象,然后将其转换为JSON字符串。在JavaScript中,我们可以使用`JSON.stringify()`方法将对象转换为JSON格式。例如: ```javascript let person = { name: 'Alice', ...

    Delphi XE7解析JSON的4种方法ParsingJsonWithFiremonkey.rar

    首先,你可以使用`TJSONParser.Parse`方法将JSON字符串转换为`TJSONObject`对象。然后,通过`TJSONObject`的属性和方法来访问和操作JSON数据。例如: ```delphi uses System.JSON; var JSONString: string; ...

    javascript克隆对象深度介绍

    这种方式将对象转换成JSON字符串,然后再解析回新的对象。但这种方法有一些限制,例如它不能处理函数和循环引用的对象。 总的来说,JavaScript中的对象克隆是处理复杂数据结构的关键技术,理解浅度克隆和深度克隆的...

    前端项目-clone.zip

    它将对象转换为JSON字符串,然后再解析回新的对象。但是,这种方法不能处理函数、循环引用以及Date、RegExp等特殊类型的对象。 2. 循环遍历:通过递归地遍历对象的所有属性,创建一个新的对象并逐个复制属性。这...

    Delphi 11.3-superobject 跨平台的JSON处理单元andriod ios可用.rar

    在反序列化JSON时,SuperObject会自动将JSON字符串转换为相应的Delphi类型。例如,从JSON字符串中读取数据: ```delphi var JSONStr: string; JSON: ISuperObject; begin JSONStr := '{"name":"John","age":30}'...

    Exjs相关例子经典

    `exjs.toJson()`和`exjs.fromJson()`分别用于将JavaScript对象转换为JSON字符串和从JSON字符串恢复为对象;`exjs.formatDate()`可以格式化日期,使其更符合人阅读的习惯。 5. **实用工具**:Exjs还提供了一些实用...

    30 个 JavaScript 妙语.docx

    7. **深度克隆对象**:利用`JSON.parse()`和`JSON.stringify()`可以实现一个简单的深度克隆对象的方法,但要注意这种方法无法处理循环引用和某些类型的值(如函数)。 8. **查找数组中最后一次出现的位置**:`...

    前端开源库-object-extended

    6. **序列化与反序列化**:可能支持对象到JSON字符串的转换以及从JSON字符串恢复对象的功能。 7. **默认值**:可能允许为对象的属性设置默认值,当属性不存在时自动填充。 "object-extended" 库的链式API设计使得...

    json-lua:JSON编码器

    - `decode(jsonStr)`: 解码JSON字符串`jsonStr`为对应的Lua值。 此外,库可能还包含一些高级特性,比如: - **安全编码/解码**:防止恶意数据注入,例如限制对象深度,或者禁止某些特殊键的编码。 - **日期时间...

    javascript笔试题

    可以使用 JSON.parse(JSON.stringify(obj)) 方法深度克隆一个对象。 17. 编写 JavaScript 脚本隐藏一个超级链接真实的地址。 可以使用 JavaScript 事件处理函数和 HTML 元素的 hidden 属性隐藏超级链接真实的地址...

    超级克隆API

    将对象转换为JSON字符串,然后再解析回新的对象。但是,这种方法不能处理函数、循环引用和Date等特殊类型。 2. **递归函数**:创建一个函数,遍历对象的所有属性,并为每个属性创建一个新的值。如果属性是对象,就...

Global site tag (gtag.js) - Google Analytics