JavaScript 对象表示法
在本节课中,我们将学习 JavaScript 对象表示法(JSON)。 开始吧!
在多个代码片段中,你已经看到过显示对象值时的一种有趣表示法。例如,来看下面这段简短的代码:
1var car = new Object(); 2car.manufacturer = "BMW"; 3car.type = "X5"; 4console.log(car);
当你运行这段代码时,Chrome 会输出如下结果:
控制台
1Object {manufacturer: "BMW", type: "X5"}
大括号内(包括大括号本身)的表示法,正是对这个对象的精准描述。你可以清楚地看出该对象包含两个属性:manufacturer 和 type,同时知道它们的值分别是 “BMW” 和 “X5”。这种表示法并非 Chrome 随意采用的格式。
它被称为 JavaScript 对象表示法(JSON)。这是一种灵活的表示方式,常用于展示 JavaScript 对象。JSON 是一种广泛应用于 Web 应用程序各组件之间数据交换的数据格式,可作为 XML 及其他结构化数据传输格式的替代方案。
正如你将学到的,JavaScript 原生支持 JSON;JSON 数据格式本身独立于语言,而 ECMAScript 规范定义了用于处理它的全局 JSON 对象。
📜注意: JSON 格式的规范详见 RFC 4627。
JSON 语法
JSON 提供了一种非常简单的语法,通过基本值、对象和数组的组合来描述结构化信息。与 XML 相比,它更简洁,用更少的字符就能表达相同的数据。
数字、字符串、布尔值和 null 值在 JSON 中的表示方式与 JavaScript 相同,唯一的例外是字符串必须用双引号包裹。以下是 JSON 中合法的单个值示例:
1123 213818 3"Hummingbird" 4null 5true 642.5
📜注意: JSON 不支持 undefined 值。
对象使用键值对表示,其中键名必须用双引号括起来。键与值之间用冒号分隔,不同属性之间用逗号分隔。整个属性列表被花括号包围。
以下是一个简单示例:
1{ 2 "manufacturer": "BMW", 3 "type": "X5" 4}
复合对象可以通过嵌套的 JSON 表示法来描述,例如:
1{ 2 "id": 4234, 3 "name": { 4 "first": "John", 5 "last": "Doe" 6 }, 7 "enables": true 8}
集合类型的值和对象也可以用 JSON 表示,类似于 JavaScript 数组。集合元素用方括号包围,每个元素使用其原生的 JSON 表示形式,元素之间用逗号分隔。
以下是一个简单示例:
1[23, { "type": "S", "name": "Small" }, true]
显然,你可以将值、对象和数组的表示法组合起来,以描述复杂的大规模结构,比如数组中的对象、对象中的数组等。
JavaScript 原生支持 JSON。因此,你可以在 JavaScript 中直接使用 JSON 来创建对象,如下面的代码示例所示。
示例:在 JavaScript 中使用 JSON
No configuration found for ID: 74e53c280f36942e5b26e47a93c072b0f2809d38a858ee33cabc92d5b94bdc07
📜注意: 在 JavaScript 中使用 JSON 初始化对象时,可以省略属性名的双引号。
在此示例中,order 对象是通过 JSON 定义的。初始化 order 变量后,你可以像使用构造函数设置属性那样访问它的属性。不出所料,这段代码的输出如下:
控制台
1Date: 11/20/2013 2Product: Surface 4 Pro 3Unit price: 799 4Amount: 1 5Product: Type Cover 4 6Unit price: 129 7Amount: 1 8Product: Docking station 9Unit price: 199 10Amount: 1
在下一课中,我们将学习如何序列化和解析 JSON 文档。
期待下次再见! :)