掌握 JSON 支持的六种核心数据类型及其语法规则。
区分简单数据类型(原始类型)与复杂数据类型(结构化类型)。
理解 JSON 字符串中特殊字符的转义机制及数字格式的严格限制。
学会构建嵌套的 JSON 对象和数组,处理层级化数据。
明确 null 在 JSON 中的特定含义,区别于 JavaScript 中的 undefined。
JSON(JavaScript Object Notation)是一种轻量级的、基于文本的数据交换格式,完全独立于编程语言。尽管它源自 JavaScript,但其规范是通用的。JSON 主要支持 6 种 数据类型。根据结构的复杂性,它们可以分为两类:
简单数据类型:
字符串 (String)
数字 (Number)
布尔值 (Boolean)
空值 (Null)
复杂数据类型:
对象 (Object)
数组 (Array)
注意:JSON 不支持函数、日期对象、正则表达式或
undefined。如果需要传输这些类型,必须先将其转换为上述支持的格式(例如将日期转为字符串)。
JSON 字符串必须使用 双引号 (") 包裹。单引号在 JSON 标准中是非法的。
为了在字符串中表示特殊字符,JSON 支持多种 转义字符,其用法类似于 C 语言。
常用转义字符
代码示例
{
"name": "Vivek",
"path": "C:\\Program Files\\App",
"location": "Delhi\/India",
"message": "First Line\nSecond Line"
}解析:在
"location"字段中,\/用于转义正斜杠。虽然在大多数解析器中直接写/也是合法的,但\/是为了确保在某些旧式 HTML 解析场景(如</script>标签内)的安全性而保留的标准写法。
JSON 数字采用 十进制 表示。
支持:整数、浮点数、科学计数法(如 1.2e3)。
不支持:八进制(如 012)和十六进制(如 0x1A)。如果在 JSON 中出现这些格式,解析器将报错。
无前导零:除非是小数部分(如 0.5),否则整数不能以 0 开头(01 是非法的)。
代码示例:
{
"age": 20,
"percentage": 82.44,
"largeNumber": 1.5e10,
"negative": -45
}布尔类型仅有两个字面量值:true 和 false。
注意:必须全小写。True、FALSE 或 1/0 都不是合法的 JSON 布尔值。
代码示例:
{
"isActive": true,
"hasPermission": false,
"result": true
}null 用于表示“无”或“空”的值。它是一个独立的字面量。
区别:在 JavaScript 中,对象属性不存在通常为 undefined,但在 JSON 中 没有 undefined。如果某个字段存在但没有值,必须显式设置为 null。
代码示例:
{
"result": true,
"grade": null,
"rollno": 210,
"middleName": null
}JSON 对象是一组 键值对 (Key-Value Pairs) 的集合,包裹在花括号 {} 中。
核心规则:
键 (Key):必须是 字符串,且必须用双引号包裹。
唯一性:在一个对象中,键名应该是唯一的。如果重复,行为取决于解析器(通常后者覆盖前者),但这被视为不良实践。
分隔符:键值对之间使用逗号 , 分隔,键与值之间使用冒号 : 分隔。
值 (Value):可以是任意合法的 JSON 数据类型(包括嵌套的对象或数组)。
代码示例:
{
"Geek": {
"name": "Peter",
"age": 20,
"score": 50.05,
"isStudent": true
}
}结构分析:这里
"Geek"是一个键,其对应的值本身又是一个完整的 JSON 对象。这种嵌套结构使得 JSON 能够表达复杂的层级关系。
JSON 数组是值的 有序集合,包裹在方括号 [] 中。
核心规则:
元素分隔:数组元素之间使用逗号 , 分隔。
类型混合:数组中的元素可以是不同的数据类型(例如,一个数组可以同时包含字符串、数字和对象)。
索引:虽然 JSON 文本本身不显示索引,但在解析为编程语言(如 JavaScript)的数组后,可以通过数字索引访问(从 0 开始)。
代码示例:
简单数组:
{
"geek": ["Sahil", "Vivek", "Rahul"]
}对象数组(常见于 API 响应):
{
"collection": [
{"id": 101},
{"id": 102},
{"id": 103}
]
}应用场景:对象数组是 Web 开发中最常见的数据结构之一,常用于表示数据库查询结果列表或前端渲染的列表数据。