【问题标题】:How is JSON related to serialization?JSON 与序列化有何关系?
【发布时间】:2016-03-01 12:48:31
【问题描述】:

什么是序列化?

序列化是将对象转换为字节流以通过网络发送或存储在文件中以便对象可以再次重构的过程。

什么是 JSON

JSON 是数据交换格式,具有固定的结构。反序列化后返回 Javascript 对象。

我做了一些谷歌搜索,但找不到它们之间的关系?他们经常一起被提及。当我们说我们需要序列化 ​​JSON 中的数据时,我需要知道幕后发生了什么

【问题讨论】:

  • JSON 是字符串文字,因此是 javascript 对象的序列化形式。

标签: javascript json serialization


【解决方案1】:

JSON 基本上是结构化文本。

一个例子是客户端-服务器架构,例如网络浏览器-服务器通信。来自服务器的数据可以从原生格式序列化为 JSON(文本),并通过网络(字节流)传输到客户端(Web 浏览器)。当数据到达客户端(网络浏览器)时,它会被反序列化为 Javascript 对象并进行处理(可能会向用户显示某些内容或操作 UI - 非必要的)。

Java 示例

假设我们的服务器应用程序中有一个简单的类,它是用 Java 编写的:

class Person {
    String name;
    int age;
}

我们有这个类的一个实例:

Person person = new Person();
person.name = "John";
person.age = 32;

我们选择在服务器到客户端的通信中使用 JSON 作为数据格式。将人的实例转换为 JSON 如下所示:

String json = "{\"person\": {\"name\": \"John\", \"age\": 32} }";

现在我们只需将这个字符串写入 HTTP 响应,客户端从那里读取它 - 到一个字符串。然后将字符串反序列化为 Javascript 对象。反序列化可能如下所示(有关 JSON.parse 的更多信息,请参阅MDN / JSON.parse):

/* We get responseText by AJAX and it looks exactly the same that we sent from our web
 server - IT IS TEXT, the variable 'json' contents in our Java application. */
var responseText = "..."
var data = JSON.parse( responseText ); // JSON.parse is supported by modern browsers

如果直接写成 Javascript 对象,数据看起来像这样:

data = {
    person: {
        name: john,
        age: 32
    }
};

所以,我们从一个 Java 对象开始在服务器端。我们将 Java 对象序列化为 JSON 字符串,并通过网络将其发送到客户端。客户端将 JSON 字符串反序列化为 Javascript 对象(可以以特定语言的方式正确处理)。

【讨论】:

  • 看来你得到了我想问的。解释得很好。
  • 所以,基本上我们将对象转换为结构化字符串表示,然后将字符串转换为字节流,然后由知道如何读取的特殊程序在客户端读取结构化文本并将其转换为特定于应用程序的对象。
  • @vivek 没错!很高兴听到你从我的解释中发现了价值。
  • 如果您认为我的问题值得,您可以投票赞成 :)
【解决方案2】:

JSON 是一种格式,允许您将对象表示为字符串/文本,然后可以存储、发送等。

另一个例子是 XML,它也经常用于序列化。

示例:

对象

var Person = new Object();
Person.FirstName = "Foo";
Person.LastName = "Foo";
Person.Age = 24;

JSON 示例序列化

    {
        Person:
        {
             FirstName: "Foo",
             LastName: "Bar",
             Age: 42
        }
    }

XML 示例序列化

    <Person>
        <FirstName>Foo</FirstName>
        <LastName>Bar</LastName>
        <Age>42</Age>
    </Person>

既然您问“幕后发生了什么”:简单解释,序列化算法将迭代对象的所有属性并将它们的名称和值存储在请求格式的字符串中(JSON、XML、... )

【讨论】:

    【解决方案3】:

    JSON 表示键/值对的集合。 JSON 解析器(如JSON.parsejson_decode)会将此表示映射到反映这些集合的适当数据结构。 JSON 序列化器(如JSON.stringifyjson_encode)则相反,它们采用数据结构并将其映射到 JSON。

    以 PHP 为例:

    $obj['a'] = 'b'; //Associative Array
    $obj['c'] = 'd';
    

    它的 JSON 表示是:

    '{
        "a" : "b",
        "c" : "d"
    }'
    

    相应数据结构的键和值(在本例中为关联数组)。

    在 Javascript 中:

    var obj = {
        a : 'b',
        c : 'd'
    }
    

    这是一个 Javascript 对象,当序列化时它映射到相同的 JSON:

    '{
        "a" : "b",
        "c" : "d"
    }'
    

    JSON 描述了一种精确的 string 格式,这就是我将 JSON 标记在 ' ' 之间的原因。数据结构的字符串表示对许多事情都非常有用,比如将它们作为消息发送。

    【讨论】:

      猜你喜欢
      • 2018-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 2016-10-11
      • 2016-02-04
      • 2016-10-09
      相关资源
      最近更新 更多