JSON 格式化与缩进:Tab 还是空格?最佳实践指南

2024-06-14

格式化 JSON 不只是「好看」:合适的缩进能降低 code review 成本、减少合并冲突。本文对比 Tab 与空格、常见缩进宽度,并说明何时该美化、何时该压缩。

JSON 标准对空白字符的规定

JSON 语法中的空格、换行、Tab 仅用于分隔 token,不影响语义。

因此 { "a":1 } 与带多行缩进的写法解析结果相同;选择缩进风格纯属可读性与团队规范问题。

Tab vs 空格:怎么选?

推荐空格:跨编辑器显示一致,Git diff 更直观,与 Prettier、ESLint 默认行为一致。

Tab 在 JSON 中合法,但不同 tab 宽度会导致对齐混乱,开源项目与 API 文档中较少采用。

若团队已有 .editorconfig 规定 indent_style = space,JSON 应跟随同一规则。

2 空格 vs 4 空格

2 空格:前端、Node.js、package.json 生态最常见;嵌套深时仍能保持行宽合理。

4 空格:部分 Java、Python 项目配置文件更常见。

关键是一致:同一仓库内不要混用 2 与 4。本站默认可读性格式化为 2 空格。

{
  "user": {
    "name": "Alice",
    "roles": ["admin", "editor"]
  }
}

美化(Pretty Print)适用场景

调试接口响应、编写示例文档、人工编辑配置文件。

Code Review 时格式化后再提交,diff 只反映实质变更。

压缩(Minify)适用场景

生产环境 HTTP 传输、写入消息队列、嵌入 HTML 减少体积。

压缩后不可读,请勿直接手工编辑压缩 JSON;应保留一份格式化源文件或从数据库/API 重新生成。

{"user":{"name":"Alice","roles":["admin","editor"]}}

团队规范建议

仓库根目录 .editorconfig 声明 json 文件 indent_size。

CI 中可选:对提交的 .json 样例运行 json.tool 或 jq 确保可解析。

对外 API 文档示例统一 2 空格;日志存储可用压缩格式节省空间。