JSON 和 YAML 有什么区别
一句话结论
机器之间传数据用 JSON,人写配置文件用 YAML。JSON 是几乎所有编程语言和接口的标准格式,解析快、生态全;YAML 靠缩进表达层级,可读性和手写体验更好,但缩进错位就会解析失败。两者可以无损互转。
核心区别对照
| 语法核心 | JSON | YAML |
|---|---|---|
| 可读性 | 一般,括号密集 | 好,接近自然语言 |
| 是否支持注释 | 不支持 | 支持 # 注释 |
| 解析速度 | 快,原生 JSON.parse | 较慢,需额外库 |
| 语言/工具支持 | 全平台原生 | 需 yaml 库,多数语言要装包 |
| 出错风险 | 低,结构显式 | 高,缩进与制表符敏感 |
| 典型用途 | 接口传输、日志、存储 | K8s / CI / Docker Compose 配置 |
JSON
JSON 源自 JavaScript 对象字面量,现在是事实上的数据交换标准。它的结构完全由括号和逗号显式定义,不依赖缩进,因此机器生成和解析都极其稳定,浏览器原生支持 JSON.parse。代价是冗长、不支持注释,手写得小心翼翼地处理末尾逗号。
YAML
YAML 用缩进和短横线表达层级,去掉了绝大部分括号,读写体验明显更好,并支持注释——这也是 Kubernetes、GitHub Actions、Docker Compose 都选它的原因。代价是缩进敏感:一个空格错位或误用 Tab 就会解析失败,且大多语言需要额外依赖。
怎么选
- 接口返回、跨服务传输、日志落盘 → 选 JSON
- 需要人频繁手改、需要写注释的配置 → 选 YAML
- K8s / CI / Ansible 等生态内 → 跟随生态,直接用 YAML
相关工具
常见问题
YAML 是 JSON 的超集吗
语法上基本是:合法的 JSON 通常能被 YAML 解析器读进去。但反过来不成立,YAML 的锚点、注释、多行字符串在 JSON 里没有对应物。
配置文件到底该用哪个
看谁在改。机器生成、程序读写用 JSON;人天天手改、要加注释说明用 YAML。
两者能互相转换吗
能,而且是近似无损的(YAML 的锚点和注释转成 JSON 后会丢失,其余结构可完整映射)。