ZonoTools

JSON vs YAML:区别、使用场景和如何选择

作者 ZonoTools10 分钟阅读

区别是什么

讨论 JSON vs YAML 时,不是判断哪个格式绝对更好。两者都能表示嵌套数据、对象和列表。区别在于主要读者:JSON 更适合机器、API 和严格 parser;YAML 更适合人类编辑配置和审查 diff。

一句话:JSON 严格且通用,适合数据交换;YAML 更易读,适合人维护配置。

什么是 JSON

JSON 是 JavaScript Object Notation。它使用 {}[]、带引号的 key 和逗号。缩进帮助阅读,但解析后不改变含义。

这种严格性是优点。几乎所有主流语言都有成熟快速的 JSON parser。JSON 无效时通常会明确失败。

json
{ "service": "api", "port": 443, "regions": ["us-east", "eu-west"]}

什么是 YAML

YAML 优先考虑人类可读性。它用缩进表达嵌套,用 - 表示列表,很多简单值不需要引号。因此它常出现在 Kubernetes、Docker Compose、GitHub Actions、Helm values 和配置文件中。

代价是:缩进就是语法。一个空格放错,key 可能进入另一个块。某些值如果不加引号,也可能被解析成意外类型。

快速比较

text
Aspect JSON YAML ----------------------------------------------------------------- Readability 更紧凑,括号和引号更多 更适合在 Git 中审查 Parsing 严格且通用 更灵活,边界情况更多 Comments 不支持原生注释 支持 # 注释 Typical use API 和生成 payload 手写 config 和 manifest Common risk 逗号或引号错误 缩进和隐式类型

什么时候用 JSON

选择 JSON 的场景:

  • 发布或消费 application/json API。
  • 浏览器、移动应用或微服务读取数据。
  • 内容由代码、数据库、日志或遥测生成。
  • 需要简单 parser 和明确错误。

如果文件从 JSON 开始,只是因为仓库规范才需要 YAML,用 JSON to YAML 转换,不要手工重写。

什么时候用 YAML

选择 YAML 的场景:

  • 人类在 Git 中审查和编辑配置。
  • 需要在 key 附近写注释解释意图。
  • 技术栈已经使用 YAML 管理 CI、Kubernetes、Docker Compose 或 DevOps 工具。
  • diff 可读性比紧凑性更重要。

YAML 语法有效不代表目标平台接受。部署前仍要用目标系统校验。

结论

JSON vs YAML 是上下文选择。API、机器和严格解析优先时用 JSON;配置、人类维护和 Git 审查优先时用 YAML。需要两者时,在边界处有控制地转换,并验证结果。

footer=