如何压缩 JSON 减小传输体积
什么是 JSON 压缩(Minify)?
JSON 压缩(Minify)是指去除 JSON 字符串中所有不必要的空白字符(空格、换行符、制表符),将格式化的多行 JSON 转换为单行紧凑字符串,从而减小数据体积。压缩不改变 JSON 的任何数据内容,语义完全等价。
格式化 JSON 的可读性优先,适合人工阅读和编辑;压缩 JSON 的传输效率优先,适合程序间的数据交换和 API 响应。在生产环境的 API 中,通常应发送压缩 JSON,节省带宽和加快响应速度。
压缩能节省多少空间?
节省量取决于 JSON 的结构复杂性和原始格式化程度。一般而言:格式化 JSON(2 空格缩进)压缩后通常节省 20-40% 的字节;格式化 JSON(4 空格缩进)压缩后通常节省 30-50%;字段名短、值为数字的紧凑数据,节省比例相对较小;嵌套深、格式整齐的数据,节省比例更大。
压缩后的 JSON 通常还可以进一步用 gzip 或 brotli 压缩传输(HTTP 响应的 Content-Encoding),两者结合可以比原始格式化 JSON 小 70-90%。
代码中压缩 JSON
// JavaScript
const minified = JSON.stringify(JSON.parse(prettyJson));
// 或 / or
const minified = JSON.stringify(obj); // 默认输出即为压缩格式
# Python
import json
minified = json.dumps(data, separators=(',', ':'))
# separators=(',', ':') 去除冒号和逗号后的空格
// Go
import "encoding/json"
b, _ := json.Marshal(data) // 默认输出压缩 JSON
string(b)
// 命令行 jq
echo '{"a": 1, "b": 2}' | jq -c .
# -c 参数表示 compact (压缩) 输出
何时应该压缩 JSON?
应该压缩 JSON 的场景:生产环境 API 响应(减少带宽消耗);前端打包中的 JSON 数据文件(如国际化翻译文件、配置数据);嵌入到 HTML 或 JavaScript 中的 JSON 数据;存储到数据库或缓存系统的 JSON 字符串。
不应该压缩的场景:配置文件(需要人工编辑和阅读);版本控制系统中的 JSON 文件(格式化 JSON 的 diff 更清晰,便于代码审查);日志中的 JSON(格式化更易于排查问题)。
gzip 压缩:比 JSON 压缩更高效
单纯的 JSON 压缩(去除空白)通常节省 20-50%,而 HTTP 传输层的 gzip 压缩通常能再节省 60-80%(在已压缩 JSON 的基础上)。两者结合的效果最好,但如果只能选一个,gzip 压缩的效益更高。
现代 Web 框架默认开启 gzip/brotli 压缩,因此对于 API 响应,开启服务端压缩通常比手动压缩 JSON 更重要。当然,先压缩 JSON 再 gzip,两者叠加效果最佳。
键名缩短:更激进的体积优化
在某些对性能极度敏感的场景(如 IoT 设备、实时游戏),可以考虑将 JSON 键名缩短来进一步减小体积。例如:{"temperature": 25.5, "humidity": 68} 可以缩短为 {"t": 25.5, "h": 68},数据含义不变但体积更小。
这种方式会严重降低可读性,需要维护键名映射文档,建议只在有明确性能需求时才采用。对于大多数应用,标准的 JSON 压缩 + gzip 已经足够高效。
在线 JSON 压缩工具的使用
在线 JSON 格式化工具通常同时提供"格式化"和"压缩"两个功能。使用步骤:粘贴格式化的 JSON 到输入框;选择"压缩"或"Minify"功能;工具会输出去除所有空白字符后的单行 JSON;复制结果并使用。
压缩操作是完全可逆的——任何时候都可以将压缩 JSON 粘贴到格式化工具中还原为可读格式。建议始终保留一份格式化版本作为"源",将压缩版本作为"发布"版本。
立即免费使用相关工具
免费使用 →