`
mutongwu
  • 浏览: 448642 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JSON对象的序列化和还原

阅读更多

window.JSON 对象,处理JSON对象与字符串之间的转化。


浏览器支持:IE8+, Firefox 3.5+, Safari 4+, Chrome, and Opera 10.5+.


跨浏览器的解决方案,可以引用第三方库json2.js :https://github.com/douglascrockford/JSON-js

JSON.stringify(value[, replacer [, space]])  —— 把数据对象转化为字符串。
注意: 1)默认跳过函数; 2)Date 类型将自动转为字符串。
参数介绍:
    value: 被序列号的对象;对象可以自定义 toJSON() 方法,更改序列化结果。


    replacer: 对象序列化调用的函数;数字或字符串的数组,指定对象中需要被序列号的属性。
            当replacer是一个函数时候,它的返回值将影响对象属性的序列化结果:
            1) 返回 undefined ,对象的该属性将被删除;
            2)返回一个 Object 对象,该 Object 对象将自动被递归序列化;

                 注意: 改返回对象不能自定义toJSON方法, 否则将导致浏览器崩溃!!!

    space: 数字或字符串,为了可读效果,对序列化的字符串插入N个空白或一个特定字符。
                 注意: 如果自定义了字符,就没办法重新用parse()解析回对象了。

// 例子1:
    var obj = { "a": 100,
                "b": 'jack',
                "c": "www\"kk\"www",
                "say": function(){alert("hello")},
                "d": [1,2,3],
                "e": {"e1":"hwow"},
                "f": true,
                "g": new Date()
            };
    var str = JSON.stringify(obj);
    
    // -- output --
    {"a":100,"b":"jack","c":"www\"kk\"www","d":[1,2,3],"e":{"e1":"hwow"},
         "f":true,"g":"2012-08-21T02:33:22.969"}

   // 例子2:
    function censor(key, value) {
      switch(key){
        case "foundation": return {"Company":value,"Modifier": "Shawn"};
        case "model": return undefined;
        case "week" : return 30;
        // DONT'T DO THIS。IE下报堆栈溢出错误,Firefox直接就崩溃了。
        // case "transport": return {"transport":value,"toJSON": function(){return "UNKNOW";}};
        default: return value;
      }
    }
     
    var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7};
    var jsonString = JSON.stringify(foo, censor,"~");
    console.log(jsonString);
    
    // --- output ----
    { ~"foundation": { ~~"Company": "Mozilla", ~~"Modifier": "Shawn" ~},
       ~"week": 30, ~"transport": "car", ~"month": 7 }



JSON.parse(value[, replacer]) —— 将字符串化的对象还原。
参数介绍:
    value:被还原的对象字符串;
    replacer: 函数,对象还原调用。它的返回值将影响对象结果。如果返回 undefined ,对象的该属性将被删除;

    var book = {
        "name" : "程序设计",
        "pubDate": new Date(2010,1,1),
        "releaseDate" : new Date(2009,10,10),
        "price" : 199
    }
    var jsonText = JSON.stringify(book);
    console.log(jsonText);
    // {"name":"程序设计","pubDate":"2010-01-31T16:00:00.000Z",
                   "releaseDate":"2009-11-09T16:00:00.000Z","price":199}

    var bookCopy = JSON.parse(jsonText,function(key, value){
        if(key === "pubDate"){
            return new Date(value);
        }else if(key === "price"){
            return undefined;
        }
        return value;
    });
    console.log(typeof bookCopy.price);         // undefined 已经被删除了
    console.log(typeof bookCopy.pubDate);       // object Date类型
    console.log(typeof bookCopy.releaseDate);   // string 默认仍然是字符串



注意:使用stringify 方法将对象串行化,则应该使用parse 方法还原。 这在本地存储的读取时候,容易犯错,出现bug:
     比如:

     var aStr = "hello";
     var result = JSON.stringify(aStr);
     console.log(result);               // "hello"  注意:这里前后多了2个双引号
     console.log(result === aStr);      // false

     var aStr2 = JSON.parse(result);    //使用parse()方法还原
     console.log(aStr === aStr2);       // true


参考资料:
    https://developer.mozilla.org/en-US/docs/Using_native_JSON    
    《JavaScript高级程序设计3》

 

分享到:
评论

相关推荐

    Json序列化和反序列化

    JSON序列化是将数据对象转化为JSON字符串的过程,而反序列化则是将JSON字符串还原为数据对象。在C#中,处理JSON序列化和反序列化有多种方法,本篇文章将深入探讨这一主题。 1. .NET框架内置支持 .NET Framework ...

    Json.net在后台对Json序列化和反序列化

    Json.NET是.NET开发中广泛使用的第三方库,由James Newton-King 开发,它提供了一套高效且功能丰富的JSON序列化和反序列化的解决方案。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web...

    Json序列化与反序列化

    在编程中,我们经常需要将JSON对象转换为编程语言中的数据结构(如Java对象、C#类等),这个过程称为序列化;反之,将编程语言中的数据结构转换回JSON字符串则称为反序列化。 **一、Json序列化** 序列化是将数据...

    Json格式序列化和反序列化处理

    在C#中,处理JSON格式的序列化和反序列化是开发过程中的常见任务,这涉及到将C#对象转换为JSON字符串,以及将JSON字符串还原为C#对象。本文将详细介绍C#中几种常用的JSON处理方法。 一、Newtonsoft.Json库(Json...

    使用json-lib完成json的序列化和反序列化.pdf

    JSON库如json-lib为Java提供了序列化和反序列化的能力,即将Java对象转换为JSON字符串,以及将JSON字符串还原为Java对象。以下是关于使用json-lib进行JSON序列化和反序列化的详细说明: 1. **JSON对象的序列化** ...

    iOS objective-c 实体类对象的序列化为Json及反序列化

    Objective-C的实体类对象序列化和反序列化是数据处理的关键环节,它涉及到如何将内存中的对象转换为可存储或传输的数据格式,如JSON(JavaScript Object Notation),以及如何将接收到的JSON数据还原为对象。JSON因...

    详细案例介绍json序列化与反序列化

    在.NET Framework中,序列化主要分为XML序列化和JSON序列化。JSON序列化通常用于Web服务或Web应用的数据交换。 **反序列化**则是指将序列化的数据恢复为对象的过程。在.NET Framework中,反序列化可以将JSON格式的...

    c++ Model到Json的序列化、反序列化

    序列化是指将对象的状态转换为可存储或传输的形式,而反序列化则是将这种形式还原为对象。在C++中,有多种库可以用来实现Json的序列化和反序列化,如nlohmann/json、jsoncpp、RapidJSON等。这里我们主要讨论nlohmann...

    C#之JSON序列化和反序列化

    在C#编程中,JSON(JavaScript Object Notation)序列化和反序列化是常见的数据转换技术,用于在应用程序之间交换数据。JSON是一种轻量级、易于读写的数据格式,广泛应用于Web服务和客户端之间的通信。本篇文章将...

    测试JSON格式的正反序列化

    C#作为.NET框架的一部分,提供了内置支持JSON序列化和反序列化的工具,使得对象和JSON字符串之间的转换变得简单易行。在本项目中,我们将深入探讨如何使用C#进行JSON的正反序列化。 在C#中,`System.Text.Json`命名...

    C# json序列化应用实例

    C#中的JSON序列化和反序列化是将C#对象转换为JSON字符串,以及将JSON字符串还原为C#对象的过程,这对于网络通信和数据存储至关重要。下面我们将详细探讨C#中如何进行JSON序列化应用。 首先,要进行JSON操作,你需要...

    c#对象序列化和反序列化,压缩流

    在C#编程中,对象序列化和反序列化是至关重要的技术,它们允许我们将对象的状态转化为可存储或可传输的数据格式,例如XML、JSON或二进制,以便于保存、恢复或者在网络间传递。而“压缩流”则涉及到数据的压缩和解...

    Java对象的序列化和反序列化实践

    在Java编程语言中,对象的序列化和反序列化是两个关键的概念,它们对于数据存储、网络传输以及持久化有着重要的作用。这篇文章将深入探讨这两个主题,并通过实践例子来阐述其工作原理。 **序列化(Serialization)*...

    C#对象序列化 源代码

    C#对象序列化是.NET开发中必不可少的一个部分,它提供了保存和还原对象状态的能力,简化了数据交换和持久化操作。`BinaryFormatter`和`JsonSerializer`是主要的序列化工具,它们各有优缺点,适用于不同的场景。理解...

    对象的序列化和反序列化

    序列化是将一个对象转换为字节流的过程,而反序列化则是将字节流还原为原来的对象。这两个过程在许多场景下都非常有用,比如在网络传输、存储到磁盘或数据库、以及实现跨进程通信时。 首先,我们需要了解`...

    iOS Json 实体类序列化及反序列化

    序列化是指将对象转换为可以传输或存储的数据格式,对于JSON,这意味着将对象转换成JSON字符串。在iOS中,我们可以使用`NSJSONSerialization`类来完成这一过程。 #### 1. Objective-C ```objc // 定义一个实体类 @...

    C# 各种序列化和反序列化

    最后,二进制序列化是另一种高效的序列化方式,它将对象直接转换为二进制数据,节省存储空间,但可能不如XML和JSON那么易于理解和跨平台。C#中的BinaryFormatter类负责二进制序列化和反序列化,但需要注意的是,由于...

Global site tag (gtag.js) - Google Analytics