前言
本文将对 JSON 的语法、解析、序列化进行详细的说明,帮助大家掌握 JSON 的使用方式。 如果文中有不对、疑惑或者错字的地方,欢迎在评论区留言指正🌻
一、JSON简介
在 JSON 之前,XML 曾经一度成为互联网上传输数据的事实标准。第一代 Web服务很大程度上是以 XML 为基础的,以服务器间通信为主要特征。可是,XML 也并非没有批评者。有的人认为 XML 过于冗余和啰唆。为解决这些问题,也出现了几种方案。不过 Web 已经朝着它的新方向进发了。
2006年,Douglas Crockford 在国际互联网工程任务组(IETF,The Internet Engineering Task Force)制定了 JavaScript 对象简谱(JSON, JavaScript Object Notation)标准,即 RFC 4627。但实际上,JSON 早在 2001 年就开始使用了。JSON 是 JavaScript 的严格子集,利用 JavaScript 中的几种模式来表示结构化数据。Crockford 将 JSON 作为替代 XML 的一个方案提出,因为 JSON 可以直接传给 eval() 而不需要创建 DOM。
理解 JSON 最关键的一点是要把它当成一种数据格式,而不是编程语言。 JSON 不属于 JavaScript,它们只是拥有相同的语法而已。JSON 也不是只能 在 JavaScript 中使用,它是一种通用数据格式。很多语言都有解析和序列 化 JSON 的内置能力。
二、语法
JSON 语法支持表示 3 种类型的值。
- 简单值 :字符串、数值、布尔值和 null 可以在 JSON 中出现,就像在 JavaScript 中一样。特殊值 undefined 不可以。* 对象 :第一种复杂数据类型,对象表示有序键/值对。每个值可以是 简单值,也可以是复杂类型。* 数组 :第二种复杂数据类型,数组表示可以通过数值索引访问的值的 有序列表。数组的值可以是任意类型,包括简单值、对象,甚至其他数组。JSON 没有变量、函数或对象实例的概念。JSON 的所有记号都只为表示结构化数据,虽然它借用了 JavaScript 的语法,但是千万不要把它跟 JavaScript 语言混淆。
1. 简单值
最简单的JSON可以是一个数值。例如,下面这个数值是有效的JSON:
5
这个 JSON 表示数值 5。类似地,下面这个字符串也是有效的 JSON:
"Hello CoderBin!"
JavaScript 字符串与 JSON 字符串的主要区别是,JSON 字符串必须使用双引号(单引号会导致语法错误)。
布尔值和 null 本身也是有效的 JSON 值。不过,实践中更多使用 JSON 表示比较复杂的数据结构,其中会包含简单值。
2. 对象
对象使用与 JavaScript 对象字面量略为不同的方式表示。以下是 JavaScript 中的对象字面量:
let person = {name: 'CoderBin',age: 18
}
虽然这对 JavaScript 开发者来说是标准的对象字面量,但 JSON 中的对象必须使用双引号把属性名包围起来。下面的代码与前面的代码是一样的:
let object = {"name": "CoderBin","age" : 18
};
而用 JSON 表示相同的对象的语法是:
{"name": "CoderBin","age": 18
}
与 JavaScript 对象字面量相比,JSON 主要有两处不同。
- 没有变量声明( JSON 中没有变量)。
- 最后没有分号(不需要,因为不是 JavaScript 语句)。
同样,用引号将属性名包围起来才是有效的 JSON。属性的值可以是简单值或复杂数据类型值,后者可以在对象