JSON 数据类型

JSON数据类型

掌握JSON的六种基本数据类型及其使用方法

JSON数据类型概述

JSON(JavaScript Object Notation)支持六种基本数据类型。这些数据类型可以分为两类:

简单数据类型
  • 字符串(String) - 文本数据
  • 数字(Number) - 整数或浮点数
  • 布尔值(Boolean) - true 或 false
  • Null - 空值
复杂数据类型
  • 对象(Object) - 键值对集合
  • 数组(Array) - 有序值列表
完整JSON示例
{
  "string": "这是一个字符串",
  "number": 42,
  "boolean": true,
  "nullValue": null,
  "object": {
    "key": "value"
  },
  "array": [1, 2, 3, 4, 5]
}
" "
字符串

表示文本数据

123
数字

整数或浮点数

T/F
布尔值

true 或 false

Null

表示空值

{}
对象

键值对集合

[]
数组

有序值列表

字符串(String)

字符串概述

JSON字符串是由零个或多个Unicode字符组成的序列,使用双引号括起来。

字符串示例
"Hello, World!"
"JSON教程"
""
"这是一个较长的字符串,可以包含空格和标点符号。"
转义字符

JSON字符串中某些字符需要使用反斜杠进行转义:

字符 转义序列 描述 示例
双引号 \" 字符串中的双引号 "他说:\"你好!\""
反斜杠 \\ 字符串中的反斜杠 "路径:C:\\Windows\\System32"
换行 \n 新行 "第一行\n第二行"
回车 \r 回车 "文本\r新行开始"
制表符 \t 水平制表符 "姓名\t年龄"
退格 \b 退格 "123\b" (显示为"12")
换页 \f 换页 "页面1\f页面2"
Unicode \uXXXX Unicode字符 "\u4e2d\u56fd" (显示为"中国")
包含转义字符的字符串示例
{
  "message": "他说:\"你好!\"",
  "path": "C:\\Users\\Documents\\file.txt",
  "multiline": "第一行\n第二行\n第三行",
  "tabbed": "姓名\t年龄\t城市",
  "unicode": "\u4e2d\u56fd\u4eba"
}

数字(Number)

数字概述

JSON数字可以是整数或浮点数,使用十进制表示法。JSON不区分整数和浮点数,也不支持其他进制(如二进制、八进制或十六进制)。

数字示例
42
3.14159
-10
0.5
1.2e5
1.2e-5
0
整数

不带小数点的数字:

0
42
-100
1000000
浮点数

带小数点的数字:

3.14
-2.5
0.001
6.022e23  // 科学计数法
重要提示
  • JSON数字不使用引号
  • 前导零是不允许的(如 0123)
  • 数字不能包含逗号作为千位分隔符
  • NaN 和 Infinity 不是有效的JSON数字
正确示例
{
  "age": 25,
  "price": 19.99,
  "temperature": -5.5,
  "population": 1.4e9
}
错误示例
{
  "age": "25",        // 使用引号,变成了字符串
  "price": 19,99,     // 使用了逗号作为小数分隔符
  "count": 0123,      // 前导零
  "value": NaN,       // NaN不是有效JSON
  "infinity": Infinity // Infinity不是有效JSON
}

布尔值(Boolean)

布尔值概述

JSON布尔值表示真或假,只有两个值:truefalse。它们必须小写,且不使用引号。

布尔值示例
true
false
在对象中使用布尔值
{
  "isActive": true,
  "isDeleted": false,
  "hasPermission": true,
  "isValid": false
}
正确示例
{
  "isStudent": true,
  "isEmployed": false
}
错误示例
{
  "isStudent": "true",    // 使用引号,变成了字符串
  "isEmployed": FALSE,    // 应该小写
  "isActive": True,       // 应该小写
  "isValid": 1,           // 数字不是布尔值
  "isDeleted": "false"    // 使用引号,变成了字符串
}

Null

Null概述

JSON中的null表示空值或缺失值。它必须小写,且不使用引号。

Null示例
null
在对象中使用Null
{
  "name": "张三",
  "middleName": null,
  "age": 30,
  "spouse": null,
  "children": []
}
Null的使用场景
  • 表示可选字段的缺失值
  • 显式表示空值,与未定义字段区分
  • 作为占位符,表示将来可能填充的值
正确示例
{
  "optionalField": null,
  "deletedAt": null
}
错误示例
{
  "optionalField": "null",  // 使用引号,变成了字符串
  "deletedAt": NULL,        // 应该小写
  "emptyValue": Null        // 应该小写
}

对象(Object)

对象概述

JSON对象是无序的键值对集合,使用大括号{}包裹。键必须是字符串,值可以是任何JSON数据类型。

简单对象示例
{
  "name": "张三",
  "age": 30,
  "isStudent": false
}
对象特性
  • 键必须是字符串,且使用双引号
  • 键值对使用逗号分隔
  • 键必须是唯一的(但JSON解析器可能不强制这一点)
  • 对象可以嵌套其他对象或数组
嵌套对象示例
{
  "person": {
    "name": "李四",
    "age": 25,
    "address": {
      "street": "人民路123号",
      "city": "北京",
      "country": "中国"
    }
  },
  "isEmployed": true
}
包含各种数据类型的对象
{
  "string": "文本值",
  "number": 42,
  "boolean": true,
  "nullValue": null,
  "object": {
    "nestedKey": "嵌套值"
  },
  "array": [1, 2, 3]
}
重要提示
  • 对象中的最后一个属性后面不能有逗号
  • 对象键必须使用双引号
  • 对象是无序的,不同解析器可能以不同顺序处理属性

数组(Array)

数组概述

JSON数组是有序的值集合,使用中括号[]包裹。数组中的值可以是任何JSON数据类型,包括其他数组和对象。

简单数组示例
["苹果", "香蕉", "橙子"]
数组特性
  • 数组元素使用逗号分隔
  • 数组可以包含不同类型的值
  • 数组元素通过索引访问(从0开始)
  • 数组可以嵌套其他数组或对象
包含不同类型元素的数组
[
  "字符串",
  42,
  true,
  null,
  {
    "对象键": "对象值"
  },
  [1, 2, 3]
]
对象数组示例
[
  {
    "id": 1,
    "name": "张三",
    "age": 30
  },
  {
    "id": 2,
    "name": "李四",
    "age": 25
  },
  {
    "id": 3,
    "name": "王五",
    "age": 35
  }
]
多维数组示例
[
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]
重要提示
  • 数组中的最后一个元素后面不能有逗号
  • JSON数组是有序的,顺序在解析时会保留
  • 空数组使用[]表示

JSON数据类型对比

数据类型总结
数据类型 描述 示例 注意事项
字符串 文本数据 "Hello" 必须使用双引号
数字 整数或浮点数 42, 3.14 不使用引号,不支持NaN/Infinity
布尔值 真或假 true, false 必须小写,不使用引号
Null 空值 null 必须小写,不使用引号
对象 键值对集合 {"key": "value"} 键必须使用双引号
数组 有序值列表 ["a", "b", "c"] 元素使用逗号分隔
综合示例:包含所有数据类型的JSON
{
  "user": {
    "id": 12345,
    "username": "john_doe",
    "fullName": "John Doe",
    "age": 30,
    "isActive": true,
    "isVerified": false,
    "lastLogin": null,
    "preferences": {
      "theme": "dark",
      "notifications": true,
      "language": "zh-CN"
    },
    "tags": ["developer", "javascript", "web"],
    "scores": [95, 87, 92, 88],
    "contacts": [
      {
        "type": "email",
        "value": "john@example.com"
      },
      {
        "type": "phone",
        "value": "+1234567890"
      }
    ]
  },
  "metadata": {
    "version": "1.0",
    "createdAt": "2023-01-15T10:30:00Z",
    "updatedAt": null
  }
}