配置文件里 JSON 和 YAML 怎么选
比较 JSON 和 YAML 在开发配置、CI 文件、Kubernetes 清单、API 示例和机器生成数据中的取舍。
JSON 和 YAML 经常表达同一种数据模型:对象、数组、字符串、数字、布尔值和 null。区别在于它们面对人工编辑和机器生成流程时的表现。
选择格式时,先看谁会编辑它,以及流水线需要多严格。
JSON 严格且可预测
JSON 适合机器生产或消费的文件:
- API 请求和响应示例。
- package 元数据。
- 生成型配置。
- 服务之间的数据交换。
- 需要跨环境稳定解析的测试 fixture。
严格语法有时显得啰嗦,但能减少歧义。字符串需要引号,逗号不能乱放,解析器行为通常一致。
需要快速校验、检查或规范化 JSON 时,可以用 JSON 格式化工具。
YAML 更适合人工维护配置
YAML 常用于人维护的文件:
- Kubernetes manifest。
- GitHub Actions workflow。
- Docker Compose 文件。
- 应用配置。
- 文档示例。
当嵌套较深、需要注释时,YAML 更容易阅读。代价是缩进、隐式类型和多文档文件会带来意外。
重要 YAML 在 apply 或 commit 前,可以先用 YAML 格式化 / 校验工具 检查。
YAML 容易错在哪里
常见 YAML 问题包括:
- 使用 Tab,而解析器期待空格。
on、yes、no被意外解释。- 两个文档被粘到一个文件里。
- 缩进看起来对,但实际结构变了。
- 自动转换时注释丢失。
这些问题可以管理,但确实会带来运维风险。
JSON 容易错在哪里
常见 JSON 问题包括:
- 从 JavaScript 复制出尾随逗号。
- 在严格 JSON 文件里加入注释。
- 字符串转义后难以阅读。
- 大文件不适合人工编辑。
JSON 对机器更安全,但不一定对人更友好。
实用规则
严格数据交换优先 JSON。需要人类阅读和注释的配置优先 YAML。转换时要谨慎,部署前要校验,不要假设两种格式双向转换能保留所有细节。