JSON

因为属性只是捕获了它们的值,而不是包含它们,对象和数组在计算机的内存中储存为字节序列,存放它们的内容的地址(内存中的位置)。 因此,包含另一个数组的数组,(至少)由两个内存区域组成,一个用于内部数组,另一个用于外部数组,(除了其它东西之外)其中包含表示内部数组位置的二进制数。

如果你想稍后将数据保存到文件中,或者通过网络将其发送到另一台计算机,则必须以某种方式,将这些内存地址的线团转换为可以存储或发送的描述。 我想你应该把你的整个计算机内存,连同你感兴趣的值的地址一起发送,但这似乎并不是最好的方法。

我们可以做的是序列化数据。 这意味着它被转换为扁平的描述。 流行的序列化格式称为 JSON(发音为“Jason”),它代表 JavaScript Object Notation(JavaScript 对象表示法)。 它被广泛用作 Web 上的数据存储和通信格式,即使在 JavaScript 以外的语言中也是如此。

JSON 看起来像 JavaScript 的数组和对象的表示方式,但有一些限制。 所有属性名都必须用双引号括起来,并且只允许使用简单的数据表达式 - 没有函数调用,绑定或任何涉及实际计算的内容。 JSON 中不允许注释。

表示为 JSON 数据时,日记条目可能看起来像这样

  1. {
  2. "squirrel": false,
  3. "events": ["work", "touched tree", "pizza", "running"]
  4. }

JavaScript 为我们提供了函数JSON.stringifyJSON.parse,来将数据转换为这种格式,以及从这种格式转换。 第一个函数接受 JavaScript 值并返回 JSON 编码的字符串。 第二个函数接受这样的字符串并将其转换为它编码的值。

  1. let string = JSON.stringify({squirrel: false,
  2. events: ["weekend"]});
  3. console.log(string);
  4. // → {"squirrel":false,"events":["weekend"]}
  5. console.log(JSON.parse(string).events);
  6. // → ["weekend"]