本文目录
YAML 对比 JSON:选择合适的格式
YAML(YAML Ain't Markup Language)和 JSON(JavaScript 对象表示法)都是流行的数据序列化格式,但用途各不相同。YAML 以人类可读为设计目标,是 Kubernetes、Docker Compose、Ansible 和 CI/CD 流水线中配置文件的标准格式。JSON 则针对系统与 API 之间的数据交换进行了优化。
虽然 JSON 是 YAML 的严格子集(每一份有效的 JSON 文档都是有效的 YAML),但 YAML 增加了注释、多行字符串、锚点和别名等特性,使其在配置场景中更具表现力。
YAML 转 JSON 的工作原理
将 YAML 转换为 JSON 很简单,因为两种格式表示的核心数据类型相同:对象、数组、字符串、数字、布尔值和 null。
- YAML 转 JSON——转换器解析 YAML 的缩进和语法,解析锚点和别名,然后序列化为带花括号和方括号的紧凑 JSON
- JSON 转 YAML——转换器解析 JSON 结构,输出带正确缩进的 YAML,并可为紧凑数组选择性地采用流式风格
- 转换过程中 YAML 注释会被丢弃,因为 JSON 没有注释语法——建议将重要背景信息记录到别处
免费试用 —— 无需注册
将 YAML 转换为 JSON →何时使用该转换器
YAML 转 JSON 转换器帮助开发者在配置环境与运行时环境之间迁移数据。
- API 开发——将 YAML 配置文件转换为 JSON,用于 API 请求体或响应模拟数据
- Kubernetes 调试——将 YAML 清单转换为 JSON,供只接受 JSON 输入的工具使用
- CI/CD 自动化——将 YAML 流水线定义转换为 JSON,以便用 jq 或类似工具进行程序化处理
使用技巧与最佳实践
牢记以下技巧,让 YAML 转 JSON 的转换更干净。
- 检查缩进——YAML 对空白字符敏感,缩进不一致会导致解析错误。请使用空格,切勿使用制表符
- 留意 YAML 的怪异之处——yes、no、on、off 等值会被解释为布尔值。如果需要字面字符串,请给它们加引号
- 转换前留意锚点——如果你的 YAML 使用了锚点(&)和别名(*),它们会在 JSON 输出中被解析并就地展开
常见问题
YAML 注释会在 JSON 中保留吗?
不会。JSON 不支持注释,因此 YAML 注释会在转换过程中被丢弃。如果注释包含重要背景信息,建议将这些信息移到数据中专门的文档字段里。
为什么 YAML 会把 'yes' 和 'no' 解释为布尔值?
YAML 1.1 将 yes、no、on、off、true、false 等裸词视为布尔值。这是一个常见的坑——例如,代表挪威的国家代码 'NO' 会变成布尔值 false。请始终为这类值加引号,以便在 YAML 中把它们保留为字符串。
转换是无损的吗?
对于两种格式共有的数据类型(字符串、数字、布尔值、null、数组、对象),转换是完全无损的。而注释、锚点和自定义标签等 YAML 特有的特性,会因 JSON 没有对应形式而被解析或丢弃。