什么是 JSON?写给所有开发者的完整入门指南

3 阅读8分钟

📅 2026-03-24⏱ 阅读约 12 分钟👤 适合初学者

本文目录

  1. JSON 的定义与起源
  2. JSON 的六种数据类型
  3. JSON 对象与数组详解
  4. JSON 的语法规则
  5. JSON 的应用场景
  6. JSON 与其他格式的关系
  7. 如何读懂一段 JSON
  8. 新手常见问题

如果你刚刚开始学习编程,或者第一次在工作中接触 API 接口,你很可能已经见到过 JSON 了——那些看起来像 {"name":"张三","age":28} 的东西。本文将从零开始,彻底讲清楚 JSON 是什么、有什么用,以及如何正确使用它。

1. JSON 的定义与起源

JSON,全称 JavaScript Object Notation(JavaScript 对象表示法),是一种用于存储和传输数据的文本格式。尽管名字里有"JavaScript",但它早已独立于 JavaScript,成为几乎所有编程语言都支持的通用数据格式。

JSON 由美国程序员 Douglas Crockford 在 2001 年提出,2006 年被正式标准化(RFC 4627),并在 2017 年更新为最新规范 RFC 8259。今天,JSON 是互联网上最流行的数据交换格式,被 Google、Twitter、GitHub、微信等几乎所有互联网公司的 API 所采用。

为什么 JSON 能如此流行?因为它同时做到了两件看似矛盾的事:

  • 人类可读: 普通人不需要专业工具,直接看文本就能理解数据内容
  • 机器易解析: 计算机可以极快速地将 JSON 文本转换为内存中的数据结构

相比之下,此前流行的 XML 格式虽然功能强大,但标签冗余,同样的数据 XML 版本往往比 JSON 大 2-3 倍,解析也更复杂。JSON 凭借简洁性一举取代 XML,成为 Web API 的主流标准。

2. JSON 的六种数据类型

JSON 只有六种基本数据类型,比大多数编程语言都要简单:

① 字符串(String)

双引号包裹的文本。注意:必须是双引号,单引号不合法。

"Hello, 世界"
"2024-01-15"
"user@example.com"
"这是一行\n有换行的文本"   // \n 是换行符的转义表示

字符串中的特殊字符需要转义:

转义序列含义
"双引号
\反斜杠
\n换行符
\t制表符(Tab)
\r回车符
\uXXXXUnicode 字符(4位十六进制)

② 数字(Number)

整数或浮点数,不加引号。支持负数和科学计数法,但不支持十六进制、NaN 和 Infinity。

42          // 整数
-7          // 负整数
3.14        // 浮点数
-0.001      // 负浮点数
2.5e10      // 科学计数法:25000000000
1.2E-5      // 科学计数法:0.000012

③ 布尔值(Boolean)

只有两个值,且必须全部小写

true    // 真
false   // 假

④ 空值(Null)

表示"没有值"或"缺省",只有一个值,必须小写:

null

⑤ 对象(Object)

键值对的集合,用花括号 { } 包裹。键必须是字符串(双引号包裹),值可以是任意 JSON 类型。

{
  "name": "张三",
  "age": 28,
  "isStudent": false,
  "score": null
}

⑥ 数组(Array)

有序的值列表,用方括号 [ ] 包裹。元素可以是任意 JSON 类型,可以混合类型,可以嵌套。

["苹果", "香蕉", "橙子"]
[1, 2, 3, 4, 5]
[true, false, null, 42, "hello"]
[[1,2], [3,4], [5,6]]   // 嵌套数组

3. JSON 对象与数组详解

对象和数组是 JSON 中最重要的结构,它们可以互相嵌套,表达任意复杂的数据。

对象的嵌套

{
  "user": {
    "id": 1001,
    "name": "李明",
    "address": {
      "city": "上海",
      "district": "浦东新区",
      "zipCode": "200120"
    }
  }
}

要访问 city 字段,路径是:user → address → city,在 JavaScript 中写作 data.user.address.city

数组中的对象(最常见的结构)

这是 API 中最常见的数据结构,表示一个列表,每个元素是一个对象:

{
  "total": 3,
  "users": [
    {"id": 1, "name": "张三", "role": "admin"},
    {"id": 2, "name": "李四", "role": "user"},
    {"id": 3, "name": "王五", "role": "user"}
  ]
}

一个完整的真实世界 JSON 示例

{
  "order": {
    "id": "ORD-2024-001",
    "status": "shipped",
    "isPaid": true,
    "totalAmount": 299.00,
    "currency": "CNY",
    "customer": {
      "name": "赵六",
      "phone": "138****8888",
      "email": null
    },
    "items": [
      {
        "productId": "P001",
        "name": "机械键盘",
        "quantity": 1,
        "price": 199.00
      },
      {
        "productId": "P002",
        "name": "鼠标垫",
        "quantity": 2,
        "price": 50.00
      }
    ],
    "shipping": {
      "carrier": "顺丰",
      "trackingNo": "SF1234567890",
      "estimatedDelivery": "2024-01-20"
    },
    "createdAt": "2024-01-15T10:30:00Z",
    "updatedAt": "2024-01-16T08:00:00Z"
  }
}

💡 试试把上面这段 JSON 粘贴到我们的 格式化工具 中,观察它的树状结构!

4. JSON 的语法规则

JSON 的语法规则非常严格,以下是必须遵守的全部规则:

  1. 字符串必须用双引号——单引号不合法,包括键名
  2. 键名必须是字符串——不能是数字或裸标识符
  3. 不允许尾随逗号——对象或数组最后一个元素后面不能有逗号
  4. 不支持注释——// 注释/* 注释 */ 都不合法
  5. 不支持 undefined——值只能是 string/number/boolean/null/object/array
  6. 不支持 NaN 和 Infinity——这两个 JavaScript 特有值不是合法 JSON
  7. 数字不能有前导零——007 不合法,应写 7
  8. 文件编码必须是 UTF-8——JSON 规范规定使用 UTF-8 编码

⚠️ 一个完整的 JSON 文本必须是一个值——可以是对象、数组、字符串、数字、布尔值或 null。顶层可以是任意类型,不一定非得是对象。

5. JSON 的应用场景

① Web API 数据传输

这是 JSON 最主要的用途。当你在手机上刷微博、搜索商品、查天气,后端服务器返回给前端的数据几乎都是 JSON 格式。例如,获取用户信息的 API 响应可能是:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "code": 0,
  "message": "success",
  "data": {
    "userId": 12345,
    "nickname": "码农小王",
    "avatar": "https://cdn.example.com/avatar/12345.jpg",
    "level": 5
  }
}

② 项目配置文件

很多工具和框架使用 JSON 作为配置文件格式,例如:

  • package.json——Node.js 项目的包管理配置
  • tsconfig.json——TypeScript 编译器配置
  • settings.json——VS Code 编辑器设置
  • manifest.json——Chrome 扩展程序清单
  • appsettings.json——ASP.NET Core 应用配置

③ 数据库存储

MongoDB 使用类 JSON 的 BSON 格式存储数据;MySQL 5.7+、PostgreSQL 9.4+ 都支持原生 JSON 字段类型,可以直接存储和查询 JSON 数据。

④ 日志记录

结构化日志(Structured Logging)常使用 JSON 格式,方便日志分析系统(如 ELK Stack)解析:

{"timestamp":"2024-01-15T10:30:00Z","level":"ERROR","service":"payment","message":"支付失败","userId":1001,"amount":299.00,"errorCode":"INSUFFICIENT_BALANCE"}

6. JSON 与其他格式的关系

格式优点缺点适用场景
JSON简洁、快速、通用不支持注释、无类型校验Web API、配置文件
XML支持属性和命名空间冗长、体积大企业系统、文档存储
YAML支持注释、更简洁缩进敏感、解析慢DevOps 配置文件
CSV极简、Excel 兼容不支持嵌套结构表格数据、批量导入
Protobuf二进制、极快、极小不可读、需要 Schema高性能内部通信

7. 如何读懂一段 JSON

遇到一段陌生的 JSON,按以下步骤来理解它:

  1. 看最外层结构——是 { } 还是 [ ]?对象还是数组?
  2. 找顶层键名——对象有哪些键?这些键揭示了数据的主要字段
  3. 关注值的类型——字符串表示文本,数字表示量,布尔表示开关,null 表示缺省,嵌套对象表示子结构,数组表示列表
  4. 展开嵌套——逐层深入,理解每个层级的含义

💡 使用我们的 JSON 格式化工具 可以为 JSON 添加语法高亮,让结构更清晰,大幅降低阅读难度。

8. 新手常见问题

Q:JSON 和 JavaScript 对象有什么区别?

JSON 是一种文本格式(字符串),JavaScript 对象是内存中的数据结构。JSON 是 JavaScript 对象语法的子集,但有更严格的限制:键名必须加引号、不支持 undefined、不支持函数、不支持日期对象(Date)。在 JavaScript 中用 JSON.parse() 将 JSON 字符串转为对象,用 JSON.stringify() 将对象转为 JSON 字符串。

Q:JSON 文件用什么扩展名?

JSON 文件使用 .json 扩展名,MIME 类型为 application/json

Q:JSON 支持中文吗?

完全支持。JSON 使用 UTF-8 编码,可以包含任意 Unicode 字符,包括中文、日文、阿拉伯文等。也可以用 \uXXXX 的形式表示 Unicode 字符,例如 \u4e2d\u6587 表示"中文"。

Q:JSON 有大小限制吗?

JSON 规范本身没有大小限制,但实际应用中受限于解析器的内存和性能。大多数 Web 框架对请求体有默认限制(如 Nginx 默认 1MB),可以按需调整。

相关文章推荐

🐛 JSON 错误排查指南

8种常见错误及修复方法

⚡ JSON格式化工具使用指南

如何高效使用格式化工具

⚖️ JSON vs XML vs YAML

三种格式深度对比分析

💻 各语言JSON处理方法

JS/Python/Java/Go完整示例