什么是 JSON?
JSON(JavaScript Object Notation,JavaScript 对象表示法)是一种轻量级、基于文本的数据交换格式,设计目标是让人类易于读写、机器易于解析和生成。它最初源自 JavaScript 对象字面量语法,但后来已成为一种与语言无关的标准,几乎所有编程语言都支持它。
如今,JSON 是 Web 上数据交换的主导格式。它驱动着 REST API、配置文件、NoSQL 数据库、移动应用通信以及无数其他数据驱动系统。它的简单性和普遍性使其成为全球开发者的默认选择。
JSON 语法规则
JSON 遵循一套严格而精简的语法规则:
- 数据以 键/值对 形式结构化
- 所有键必须是 双引号字符串(不允许使用单引号)
- 键/值对之间用冒号(
:)分隔 - 键/值对之间用逗号(
,)分隔 - 花括号
{}表示对象 - 方括号
[]表示数组 - 不允许出现尾部逗号
- 严格 JSON 中不允许注释
有效的 JSON 示例
{
"name": "Jane Smith",
"age": 28,
"isEmployed": true,
"skills": ["JavaScript", "Python", "SQL"],
"address": {
"street": "123 Main Street",
"city": "San Francisco",
"zipCode": "94102"
},
"phoneNumbers": null
}
无效的 JSON 示例
尾部逗号(无效):
{
"name": "Jane",
"age": 28,
}
单引号键(无效):
{ 'name': 'Jane' }
键缺少引号(无效):
{ name: "Jane" }
JSON 数据类型
JSON 恰好支持六种数据类型:
| 类型 | 描述 | 示例 |
|------|-------------|---------|
| 字符串(String) | 双引号括起来的 Unicode 文本 | "Hello, world!" |
| 数字(Number) | 整数或浮点数 | 42, 3.14, -7, 1.5e10 |
| 布尔值(Boolean) | 逻辑真或假 | true, false |
| 空值(Null) | 有意的空值 | null |
| 对象(Object) | 无序的键/值集合 | {"key": "value"} |
| 数组(Array) | 有序的值列表 | [1, 2, 3] |
值得注意的缺失项:日期、时间戳、二进制数据、undefined 和函数在 JSON 中没有原生表示。按照惯例,日期通常以 ISO 8601 字符串形式存储。
JSON 与其他数据格式的对比
JSON 与其他几种数据交换格式并存,各有取舍:
- JSON vs XML:JSON 更简洁,解析更快。XML 支持属性、命名空间和 schema(XSD),但明显更加冗长。
- JSON vs YAML:在配置文件方面 YAML 更易读,并支持注释,但其对缩进敏感的语法容易出错。JSON 可移植性更强,校验也更严格。
- JSON vs CSV:CSV 只能是扁平的表格形式。JSON 支持嵌套层级结构和混合数据类型。
- JSON vs Protocol Buffers:Protobuf 在机器对机器通信中更小更快,但需要定义 schema,而且人类不可读。
为什么 JSON 主导 Web API
以下几个因素解释了 JSON 在 Web API 设计中的主导地位:
- 语言普及性 -- 每种主流语言都有原生或维护良好的 JSON 解析器,消除了集成摩擦。
- 浏览器原生支持 -- JavaScript 的
JSON.parse()和JSON.stringify()使 JSON 成为 Web 应用的自然选择。 - 带宽占用最小 -- JSON 的轻量级语法产生的负载比 XML 更小,从而降低延迟和带宽成本。
- 人类可读 -- 开发者无需特殊工具即可检查、调试和手写 JSON 数据。
- 灵活的 schema -- 与 XML Schema 或 Protocol Buffers 等刻板的格式不同,JSON 无需重新编译即可适应不断演进的数据结构。
JSON 的常见使用场景
- REST 和 GraphQL API -- 请求和响应负载的标准格式。
- 配置文件 -- 被 ESLint、Prettier、webpack 和 VS Code 等工具使用。
- NoSQL 数据库 -- MongoDB 和 CouchDB 以类 JSON 文档形式存储数据。
- 数据序列化 -- 为存储、传输或缓存而组织数据结构。
- 实时通信 -- WebSocket 流和 Webhook 中的 JSON 消息。
- 日志聚合 -- Winston、Logstash 和 Datadog 等结构化日志工具使用 JSON 来生成可搜索、可过滤的日志条目。
JSON 校验与格式化
在使用 JSON 时,校验至关重要。一个语法错误 -- 一个尾部逗号、一个缺失的引号或一个未转义的字符 -- 就可能破坏整个 API 集成或配置文件。人工检查不可靠,尤其对于大型 JSON 文档。
如何校验 JSON
校验通常遵循以下步骤:
- 解析 JSON 字符串,使用标准解析器,例如 JavaScript 中的
JSON.parse()或你选择的语言中对应的解析器。 - 检查语法错误 -- 解析器会在第一个违规处抛出错误,并带有指示问题位置的消息。
- 迭代修复错误 -- 由于解析器会在第一个错误处停止,请修复它并重新校验,直到文档通过。
大多数在线 JSON 工具将校验与格式化结合在一起。粘贴你的 JSON,工具会立即检查语法、用行号和列号高亮错误,并生成干净、带缩进的输出。这比在代码中用解析器异常调试要快得多。
使用 JSON 的技巧
- 使用前务必校验 -- 永远不要假设手写的 JSON 是有效的。
- 使用 linter -- ESLint 等带 JSON 插件的工具能在错误进入生产环境之前就捕获它们。
- 优先使用 JSON 库 -- 使用序列化库生成 JSON,而不是通过字符串拼接,以避免微妙的语法错误。
- 设置严格的 Content-Type 请求头 -- 对于 API,强制使用
Content-Type: application/json,以便尽早拒绝格式错误的请求。
使用免费在线 JSON 校验器和格式化工具即时检查你的 JSON 语法、定位错误并格式化数据以提高可读性。无论你是学习基础知识的初学者,还是调试生产环境 API 的经验丰富的开发者,我们的 JSON Formatter & Validator 工具都能帮助你高效地处理 JSON 数据。