JSON 格式化完全指南:语法、格式化与校验
JSON(JavaScript Object Notation)是当今互联网上最流行的数据交换格式。无论是前后端 API 通信、配置文件管理,还是 NoSQL 数据库存储,JSON 几乎无处不在。本指南将带你从零掌握 JSON 的语法规则、格式化技巧和常见错误排查方法。
什么是 JSON?
JSON 是一种轻量级的文本数据格式,由 Douglas Crockford 于 2001 年提出,并在 2006 年被 IETF 标准化为 RFC 4627(后被 RFC 8259 取代)。它基于 JavaScript 的对象字面量语法,但已被几乎所有主流编程语言原生支持。
JSON 有两个核心结构:
- 对象(Object):由花括号
{}包裹的键值对集合 - 数组(Array):由方括号
[]包裹的有序值列表
JSON 语法基础
数据类型
JSON 支持六种数据类型:字符串、数字、布尔值、null、对象和数组。
{
"name": "张三",
"age": 28,
"isActive": true,
"address": null,
"skills": ["JavaScript", "Python", "Go"],
"contact": {
"email": "zhangsan@example.com",
"phone": "138-0000-0000"
}
}
键名规则
JSON 中的键名必须使用双引号包裹,这是 JSON 和 JavaScript 对象的主要区别之一:
// ✅ 正确的 JSON
{ "name": "value" }
// ❌ 错误:使用了单引号
{ 'name': 'value' }
// ❌ 错误:键名没有引号
{ name: "value" }
⚠️ 常见陷阱:JSON 不允许使用单引号。所有字符串(包括键名和字符串值)都必须使用双引号
"。
数字规则
JSON 数字遵循以下规则:
- 支持整数和浮点数:
42、3.14、-17 - 支持科学计数法:
1.5e10、2.3E-4 - 不支持前导零:
07是无效的(但0.7有效) - 不支持十六进制:
0xFF是无效的 - 不支持
Infinity和NaN
JSON 格式化与美化
格式化(也称"美化")是指为 JSON 添加缩进和换行,使其更易阅读。在大多数语言中:
// JavaScript 格式化
const data = { name: "Alice", scores: [95, 87, 92] };
// 使用 2 个空格缩进
console.log(JSON.stringify(data, null, 2));
// 输出:
// {
// "name": "Alice",
// "scores": [
// 95,
// 87,
// 92
// ]
// }
// 使用 Tab 缩进
console.log(JSON.stringify(data, null, "\t"));
在 Python 中同样简单:
import json
data = {"name": "Alice", "scores": [95, 87, 92]}
print(json.dumps(data, indent=2, ensure_ascii=False))
JSON 压缩(Minify)
与格式化相反,压缩是移除所有不必要的空白字符,减小文件体积,适用于网络传输:
// 压缩 JSON:移除缩进和换行
JSON.stringify(data)
// 输出:"{"name":"Alice","scores":[95,87,92]}"
💡 提示:对于大数据量的 API 响应,压缩后的 JSON 通常能减少 30%-60% 的传输体积。搭配 Gzip 压缩效果更佳。
常见 JSON 错误与排查
以下是开发者最常犯的 JSON 错误:
1. 尾随逗号
// ❌ 错误:最后一个元素后面的逗号
{
"name": "Alice",
"age": 25, ← 这个逗号在 JSON 中非法
}
2. 注释
JSON 标准不支持注释。如果需要注释,考虑使用 JSON5 或 JSONC 格式。
3. 未转义的特殊字符
// ❌ 错误:字符串中的换行和制表符必须转义
{ "text": "第一行
第二行" }
// ✅ 正确:使用转义字符
{ "text": "第一行\n第二行" }
JSON 中需要转义的字符:\"、\\、\/、\b、\f、\n、\r、\t、\uXXXX。
4. 编码问题
JSON 必须使用 UTF-8 编码(RFC 8259)。中文字符可以直接写入,也可以使用 Unicode 转义:
// 两种写法等价
{ "name": "张三" }
{ "name": "\u5f20\u4e09" }
JSON 校验最佳实践
在开发中,建议养成以下习惯:
- 使用编辑器插件:VS Code 等编辑器自带 JSON 语法检查
- API 响应校验:使用 JSON Schema 验证数据结构
- 在线工具辅助:快速粘贴校验,定位错误行列
- CI/CD 集成:在构建流程中加入 JSON 校验步骤
💡 JSON Schema 示例:可以使用 JSON Schema 定义数据结构约束,在服务端和客户端同时做验证,确保数据一致性。
JSON 与其他格式对比
了解 JSON 与其他数据格式的差异,有助于在不同场景中做出正确选择:
- JSON vs XML:JSON 更简洁,解析更快;XML 支持属性、命名空间和注释
- JSON vs YAML:YAML 更适合人类编写配置文件,JSON 更适合程序间通信。详见 YAML vs JSON 对比教程
- JSON vs Protocol Buffers:Protobuf 是二进制格式,序列化更快、体积更小,但不可读
🛠️ 立即体验 JSON 在线格式化工具
打开 JSON 工具 →延伸阅读
- Base64 编解码详解 — 了解 JSON 中 Base64 编码二进制数据的方法
- JWT 完全指南 — JWT 的 Payload 就是 Base64 编码的 JSON
- YAML vs JSON 对比 — 配置文件用 JSON 还是 YAML?