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 数字遵循以下规则:

  • 支持整数和浮点数:423.14-17
  • 支持科学计数法:1.5e102.3E-4
  • 不支持前导零:07 是无效的(但 0.7 有效)
  • 不支持十六进制:0xFF 是无效的
  • 不支持 InfinityNaN

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 校验最佳实践

在开发中,建议养成以下习惯:

  1. 使用编辑器插件:VS Code 等编辑器自带 JSON 语法检查
  2. API 响应校验:使用 JSON Schema 验证数据结构
  3. 在线工具辅助:快速粘贴校验,定位错误行列
  4. 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 工具 →

延伸阅读