如果你做过前端开发、调过 API,或者翻过 IDE 的设置文件,大概率已经和 JSON 打过不少交道了。但"JSON 到底是什么格式""它和 XML 有什么区别"这些问题,真正要自己解释的时候还是容易卡住。这篇文章从定义、语法、数据类型讲到实际用途和常见错误,帮你把 JSON 一次搞清楚。
JSON 是什么
JSON(JavaScript Object Notation)是一种让机器和人都能轻松读写的文本数据格式。名字里虽然有 JavaScript,但它不绑定任何特定语言——Python、Java、Go、PHP 等主流语言都能直接解析。
JSON 起源于 JavaScript 的对象字面量语法。2000 年代初,Douglas Crockford 把它整理成独立规范,后来由 IETF 以 RFC 8259在新标签页中打开 和 Ecma International 以 ECMA-404在新标签页中打开 的形式完成标准化。
当时占主导的数据交换格式是 XML,但标签嵌套写起来很啰嗦。JSON 用更少的字符表达同样的数据,解析也更轻量,这种简洁让它迅速铺满了整个 Web 生态。
拿到一段 JSON 想看结构对不对、或者想格式化后方便阅读,可以直接粘贴到 FormatArc 的 JSON 格式化器。整个处理在浏览器里完成,你输入的数据不会被发送到任何服务器。
与其他数据格式的区别
JSON 是数据格式家族里的一员。拿它和 XML、CSV、YAML 对比,定位就很清楚了:
| 格式 | 主要用途 | 特点 |
|---|---|---|
| JSON | API / 数据交换 | 面向机器的严格规则,语法简洁、解析快 |
| XML | 遗留系统 / SOAP | 冗长但支持命名空间、Schema 校验 |
| CSV | 电子表格 / ETL | 纯表格结构,不支持嵌套 |
| YAML | 配置文件 | 人写起来舒服,但解析规则复杂 |
JSON 之所以成为首选,是因为它卡在"机器好处理"和"人也能看懂"这个平衡点上。主流语言的标准库都自带 JSON 解析器,跨语言互操作几乎没有额外成本。
JSON 基本语法
JSON 里能用的数据结构只有两种:对象和数组。
对象
用花括号 {} 包裹,键值对之间用冒号(:)连接,多对之间用逗号(,)分隔。键必须是双引号字符串。
{
"name": "李明",
"age": 30,
"city": "北京"
}
数组
用方括号 [] 包裹,元素之间用逗号分隔。可以混排不同类型,但实际开发中通常保持同一类型。
["苹果", "香蕉", "橘子"]
数据类型的完整规则和嵌套结构的细节,参见 JSON 语法指南。
JSON 的 6 种数据类型
JSON 能表达的数据类型正好是 6 种,规则和常见坑如下:
| 类型 | 示例 | 关键规则 | 常见错误 |
|---|---|---|---|
| 字符串 | "hello" | 只用双引号 | 单引号会报解析错误 |
| 数字 | 42、3.14 | 整数和浮点数不区分 | NaN、Infinity、前导零不合法 |
| 布尔值 | true、false | 全小写 | True、TRUE 都不行 |
| null | null | 全小写 | None、nil 不合法 |
| 对象 | { "key": "value" } | 键必须双引号 | 省略引号在 JS 里可以,JSON 里不行 |
| 数组 | [1, "a", null] | 有序,类型可混排 | 最后一个元素后不能跟逗号 |
数字方面,整数、小数、科学计数法(6.626e-34)都可以直接写,不需要引号。NaN、Infinity、前导零(007)会导致解析失败。
对象和数组可以自由嵌套,这种结构是 JSON 能表达复杂数据的核心原因:
{
"user": {
"name": "李明",
"hobbies": ["读书", "跑步"],
"address": {
"city": "北京市",
"district": "朝阳区"
}
}
}
JSON 的实际应用场景
Web API 数据交换
REST API 和 GraphQL 的响应格式,JSON 已经是事实标准。你用浏览器 fetch 请求一个接口,返回的几乎一定是 JSON。
配置文件
Node.js 的 package.json、TypeScript 的 tsconfig.json、VS Code 的 settings.json——开发工具的配置几乎都用 JSON。人看得懂,程序也好解析,这是它成为配置文件默认选择的原因。
数据存储与日志
MongoDB 等 NoSQL 数据库用 JSON 类似的二进制格式(BSON)存储文档。日志采集系统也常用 JSON Lines(每行一个 JSON 对象)记录结构化日志。
表格数据转换
你从电子表格导出 CSV,想喂给 API 或后端应用,通常要转成 JSON。两种格式结构差异不小,都理解一下用起来会顺手很多。
手写 JSON 时容易踩的坑
JSON 语法看起来简单,但手写时几个约束很容易忽略。
不能写注释
JSON 没有注释语法。//、/* */、# 都不行。想在文件里留备注,只能加 "_comment" 之类的占位键,或者换用支持注释的格式(YAML、JSONC)。
不能有尾随逗号
最后一个元素后面不能有多余的逗号。这在 JavaScript 里合法,但 JSON 会直接报解析错误:
{
"a": 1,
"b": 2,
}
上面 "b": 2 后面的逗号必须删掉。
键必须加双引号
JavaScript 里可以写 { name: "李明" },但 JSON 里必须写 { "name": "李明" }。
顶层只能有一个值
一份 JSON 文档的顶层只能是一个对象或一个数组,不能并排放两个。
格式乱了、不确定有没有语法错误的时候,把内容丢进 JSON 格式化器 点一下就能同时完成排错和美化。
常见问题
JSON 文件用什么打开?
任何文本编辑器都能打开。VS Code 这类 IDE 还会做语法高亮。想看格式化后的结构,粘贴到 FormatArc 的 JSON 格式化器最方便,不用装任何东西。在线美化、jq、JSON.stringify 三种方法怎么选,参见 JSON 排版工具。
JSON 和 JavaScript 对象是一回事吗?
不是。JavaScript 对象是内存里的活数据结构,JSON 始终是文本字符串。JavaScript 里允许的那些写法(省略键引号、定义函数、用 undefined、写尾随逗号),在 JSON 里基本都禁止。JSON.parse 把文本变成对象,JSON.stringify 把对象变成文本。
总结
- JSON 是一种语言无关的轻量数据交换格式
- 核心结构是对象(
{})和数组([]) - 数据类型共 6 种:字符串、数字、布尔值、null、对象、数组
- Web API 响应和配置文件是最高频的使用场景
- 不能写注释、不能有尾随逗号、键必须双引号——手写时注意
- 格式化和语法校验用 JSON 格式化器一键完成

