源本科技 | 码上会

JSON 数据类型

2026/03/13
22
0

学习目标

  • 掌握 JSON 支持的六种核心数据类型及其语法规则。

  • 区分简单数据类型(原始类型)与复杂数据类型(结构化类型)。

  • 理解 JSON 字符串中特殊字符的转义机制及数字格式的严格限制。

  • 学会构建嵌套的 JSON 对象和数组,处理层级化数据。

  • 明确 null 在 JSON 中的特定含义,区别于 JavaScript 中的 undefined


数据类型

JSON(JavaScript Object Notation)是一种轻量级的、基于文本的数据交换格式,完全独立于编程语言。尽管它源自 JavaScript,但其规范是通用的。JSON 主要支持 6 种 数据类型。根据结构的复杂性,它们可以分为两类:

  1. 简单数据类型

    • 字符串 (String)

    • 数字 (Number)

    • 布尔值 (Boolean)

    • 空值 (Null)

  2. 复杂数据类型

    • 对象 (Object)

    • 数组 (Array)

注意:JSON 不支持函数、日期对象、正则表达式或 undefined。如果需要传输这些类型,必须先将其转换为上述支持的格式(例如将日期转为字符串)。


简单数据类型

字符串 (String)

JSON 字符串必须使用 双引号 (") 包裹。单引号在 JSON 标准中是非法的。

为了在字符串中表示特殊字符,JSON 支持多种 转义字符,其用法类似于 C 语言。

常用转义字符

转义序列

描述

示例

\"

双引号

"He said, \"Hello\""

\\

反斜杠

"C:\\Users\\Data"

\/

正斜杠

"Delhi\/India"

\b

退格符

-

\f

换页符

-

\n

换行符

"Line 1\nLine 2"

\r

回车符

-

\t

水平制表符

"Col1\tCol2"

\uXXXX

Unicode 字符

"\u4E2D\u6587" (中文)

代码示例

{
  "name": "Vivek",
  "path": "C:\\Program Files\\App",
  "location": "Delhi\/India",
  "message": "First Line\nSecond Line"
}

解析:在 "location" 字段中,\/ 用于转义正斜杠。虽然在大多数解析器中直接写 / 也是合法的,但 \/ 是为了确保在某些旧式 HTML 解析场景(如 </script> 标签内)的安全性而保留的标准写法。

数字 (Number)

JSON 数字采用 十进制 表示。

  • 支持:整数、浮点数、科学计数法(如 1.2e3)。

  • 不支持:八进制(如 012)和十六进制(如 0x1A)。如果在 JSON 中出现这些格式,解析器将报错。

  • 无前导零:除非是小数部分(如 0.5),否则整数不能以 0 开头(01 是非法的)。

代码示例:

{
  "age": 20,
  "percentage": 82.44,
  "largeNumber": 1.5e10,
  "negative": -45
}

布尔值 (Boolean)

布尔类型仅有两个字面量值:truefalse

  • 注意:必须全小写。TrueFALSE1/0 都不是合法的 JSON 布尔值。

代码示例:

{
  "isActive": true,
  "hasPermission": false,
  "result": true
}

空值 (Null)

null 用于表示“无”或“空”的值。它是一个独立的字面量。

  • 区别:在 JavaScript 中,对象属性不存在通常为 undefined,但在 JSON 中 没有 undefined。如果某个字段存在但没有值,必须显式设置为 null

代码示例:

{
  "result": true,
  "grade": null,
  "rollno": 210,
  "middleName": null 
}

复杂数据类型

对象 (Object)

JSON 对象是一组 键值对 (Key-Value Pairs) 的集合,包裹在花括号 {} 中。

核心规则:

  • 键 (Key):必须是 字符串,且必须用双引号包裹。

  • 唯一性:在一个对象中,键名应该是唯一的。如果重复,行为取决于解析器(通常后者覆盖前者),但这被视为不良实践。

  • 分隔符:键值对之间使用逗号 , 分隔,键与值之间使用冒号 : 分隔。

  • 值 (Value):可以是任意合法的 JSON 数据类型(包括嵌套的对象或数组)。

代码示例:

{
  "Geek": {
    "name": "Peter",
    "age": 20,
    "score": 50.05,
    "isStudent": true
  }
}

结构分析:这里 "Geek" 是一个键,其对应的值本身又是一个完整的 JSON 对象。这种嵌套结构使得 JSON 能够表达复杂的层级关系。

数组 (Array)

JSON 数组是值的 有序集合,包裹在方括号 [] 中。

核心规则:

  • 元素分隔:数组元素之间使用逗号 , 分隔。

  • 类型混合:数组中的元素可以是不同的数据类型(例如,一个数组可以同时包含字符串、数字和对象)。

  • 索引:虽然 JSON 文本本身不显示索引,但在解析为编程语言(如 JavaScript)的数组后,可以通过数字索引访问(从 0 开始)。

代码示例:

简单数组:

{
  "geek": ["Sahil", "Vivek", "Rahul"]
}

对象数组(常见于 API 响应):

{
  "collection": [
    {"id": 101},
    {"id": 102},
    {"id": 103}
  ]
}

应用场景:对象数组是 Web 开发中最常见的数据结构之一,常用于表示数据库查询结果列表或前端渲染的列表数据。