什么是 JSON 压缩?
JSON 压缩(minification)会移除 JSON 文档中所有不必要的空白字符(空格、制表符和换行符),而不改变其数据或结构。结果是功能上完全相同的 JSON,但占用的空间显著减少。
为什么要压缩 JSON?
网络性能
每个字节对 Web 性能都很重要。一个典型的 API 响应从 15KB 压缩到 8KB:
- 减少慢速连接上的传输时间
- 降低按 GB 计费的云平台带宽成本
- 改善首字节时间(TTFB)指标
- 由于需要处理的数据更少,解析速度更快
存储效率
当将 JSON 存储在数据库、文件或缓存中时,压缩后的 JSON 占用更少空间。在大规模场景下,这可以转化为有意义的成本节约和性能提升。
嵌入代码
当将 JSON 嵌入 HTML、JavaScript 或其他文件时,压缩后的 JSON 更合适,对周围代码的干扰更小。
压缩过程中会移除什么
压缩会移除:
- 标记之间的空格和制表符
- 换行符和回车符
- 字符串内部不必要的空白会被保留(字符串值内的空格会被保留)
不会移除的内容:
- 字符串值内的空格
- 任何实际数据或结构
- 对象键和值
- 数组元素
前后对比示例
格式化 JSON(198 字节):
{
"user": {
"id": 12345,
"name": "Alice Smith",
"email": "alice@example.com",
"active": true,
"roles": [
"admin",
"editor"
]
}
}
压缩后的 JSON(104 字节 — 缩小 47%):
{"user":{"id":12345,"name":"Alice Smith","email":"alice@example.com","active":true,"roles":["admin","editor"]}}
JSON 压缩实践
Node.js
const data = require('./data.json');
const minified = JSON.stringify(data); // 无空格 = 压缩
const formatted = JSON.stringify(data, null, 2); // 2 空格缩进
Python
import json
with open('data.json') as f:
data = json.load(f)
minified = json.dumps(data, separators=(',', ':'))
构建流水线
许多构建工具会自动处理 JSON 压缩:
- Webpack 压缩 JavaScript 包中的 JSON 导入
jq命令行工具:jq -c . data.json输出紧凑 JSON- 在线工具用于快速一次性压缩
JSON 压缩 vs. 压缩(Compression)
压缩(minification)和压缩(compression)服务于不同目的:
压缩(Minification):移除空白,减少原始 JSON 大小 压缩(Compression):应用算法(gzip、Brotli)压缩二进制表示
它们相辅相成。压缩后的 JSON 比格式化 JSON 压缩效果更好,因为:
- 压缩器需要忽略的冗余空白更少
- 更一致的模式,压缩算法可以更好地利用
对于 Web API,在服务器上启用 gzip 压缩(Content-Encoding: gzip)通常比手动压缩影响更大。
何时压缩 vs. 保留格式
压缩场景:
- 通过 HTTP API 提供 JSON(配合服务器压缩)
- 大规模存储在数据库或文件中
- 将 JSON 嵌入网页
- 分发 JSON 作为可下载数据
保留格式场景:
- 编写配置文件
- 版本控制 JSON(可读的差异)
- 调试和开发
- 文档示例
常见 JSON 压缩陷阱
移除注释
标准 JSON 不支持注释,但某些工具(VS Code 设置、JSON5 格式)支持。压缩工具可能会移除非标准注释,这通常是期望的行为。
字符串转义
压缩应精确保留字符串内容,包括字符串值内的空白。"hello world" 中的空格会保留为 "hello world"——只有结构性的空白会被移除。
使用 JSON 压缩工具
我们的工具:
- 粘贴格式化 JSON — 支持任何有效 JSON
- 即时压缩 — 移除所有不必要的空白
- 显示大小缩减 — 显示原始和压缩后的字节数
- 验证 JSON — 在压缩前高亮显示错误
- 复制压缩结果 — 一键复制到剪贴板
用于优化 API 负载、为生产环境准备 JSON,以及了解 JSON 结构的大小影响。