JSON 和 YAML 怎么选?配置文件格式的取舍
JSON 严格通用适合 API 交互,YAML 简洁可注释适合配置文件。对比语法、陷阱与适用场景,帮你的项目选对数据格式。
一、定位差异
- JSON:为数据交换而生,语法严格、机器友好,是 HTTP API 的事实标准。
- YAML:为人类阅读而生,缩进表达层级、支持注释,是 K8s/CI 配置文件的主流。
一句话:程序之间传数据用 JSON,写给人看的配置用 YAML。
二、语法直观对比
同一段数据:
JSON:{"name": "aistool", "tags": ["json", "yaml"], "online": true}
YAML:
name: aistool
tags:
- json
- yaml
online: true
YAML 省掉引号和大括号,但依赖缩进——空格错了结构就错了。
三、YAML 的经典陷阱
- 挪威问题:
no/No/false会被解析成布尔假,国家代码、选项值莫名变 false(YAML 1.1 里 on/off/yes/no 都是布尔)。 - 版本号变数字:
version: 1.10解析成 1.1,必须加引号"1.10"。 - tab 陷阱:YAML 只认空格缩进,编辑器插入 tab 直接报错。
规则:字符串值一律加引号,能避开 90% 的坑。
四、JSON 的局限
- 不支持注释:写配置文件时很痛苦(JSON5/JSONC 是补救方案)。
- 尾逗号报错:最后一项多一个逗号整个解析失败。
- 数字精度:大整数(超过 2^53)在 JS 里会丢精度,ID 类字段建议存字符串。
在线体验
不用装任何环境,直接用本站JSON 格式化校验工具在线操作,数据都在浏览器本地处理,方便又安全。
常见问题
为什么 API 都用 JSON 不用 YAML?
JSON 语法严格、解析快、所有语言原生支持,且不存在 YAML 那种隐式类型转换的歧义,作为机器间交换格式更可靠。
YAML 的挪威问题怎么避免?
统一规范:所有字符串值都加引号。或迁移到 YAML 1.2(把 yes/no 还原为字符串),但很多解析器仍按 1.1 行为实现,加引号最保险。
JSON5 是什么?
JSON 的超集扩展:允许注释、尾逗号、单引号、十六进制数字等,写配置更舒服。npm(package.json)生态里常用,交换场景仍用标准 JSON。
