工具介绍
YAML 是大多数现代配置文件的首选格式——Kubernetes 配置清单、Docker Compose、GitHub Actions 和 GitLab CI 流水线、Ansible playbook——因为它对手动编辑的人来说比 JSON 更易读:大多数键不需要加引号,不会因末尾逗号出错,而且支持注释。而 JSON 则是大多数 API 和编程语言原生生成和使用的格式。
这个工具使用 js-yaml(广泛使用的 YAML 规范 JavaScript 实现)来连接两者,因此解析和生成遵循的规则与 kubectl 或 CI 运行器等支持 YAML 的工具一致。
将 JSON 转为 YAML 时,对象会变成带缩进的 key: value 块,数组会变成以 `-` 开头的列表项。将 YAML 转为 JSON 则相反,同时会把 YAML 特有的类型简写(如不加引号的 true、null 或数字)解析为正确的 JSON 类型。
为什么使用它?
- 双向转换——在同一个界面完成 JSON 转 YAML 或 YAML 转 JSON。
- 基于标准的解析与生成——通过 js-yaml 实现,输出符合真实 YAML 工具(Kubernetes、CI 系统、Ansible)的预期。
- 正确处理任意深度的嵌套对象和数组,在 YAML 的缩进结构与 JSON 的花括号/方括号之间转换。
- 正确解释 YAML 类型简写——不加引号的 true/false、null 和数字会变成正确的 JSON 类型,而不是字符串。
- 支持复制到剪贴板或下载为 .json 或 .yaml 文件。
- 100% 本地运行——你粘贴的任何内容都不会被上传。
使用方法
- 选择方向:“JSON → YAML”或“YAML → JSON”。
- 将数据粘贴到输入框中。
- 点击“转换”。
- 查看结果,然后复制或点击“下载”保存文件。
示例
输入
{"name":"Alice","roles":["admin","editor"],"active":true}输出
name: Alice
roles:
- admin
- editor
active: true
注意数组是如何变成 “roles” 下带短横线的列表项的,而布尔值仍是不加引号的 true,而不是字符串 "true"。
实用技巧
- 编写 Kubernetes 配置清单或 GitHub Actions 工作流:先用 JSON 起草结构(许多编辑器和 AI 工具生成 JSON 更可靠),再转换成 YAML 作为最终文件。
- 调试出问题的 YAML 配置:把它转换成 JSON,可以清楚看到哪些值是字符串、数字还是布尔值——YAML 灵活的语法可能会隐藏在 JSON 中一目了然的类型错误。
- 如果你的 JSON 包含带特殊字符或以数字开头的键,js-yaml 会在生成 YAML 时自动为它们加上引号,以确保能正确解析回来。
为什么类型转换是 YAML 最棘手的部分
YAML 相对 JSON 最大的易用性优势——大多数值不需要引号——同时也是最容易产生隐蔽 bug 的地方。经典例子是“挪威问题”:在 YAML 1.1(许多老旧解析器仍在使用)中,不加引号的 `no` 会被解释为布尔值 `false`,而不是字符串 “no”,这曾经搞乱过列出挪威国家代码的真实配置。这个工具遵循 YAML 1.2 规范,把会被当作布尔值处理的不加引号的值范围缩小到只有 `true` 和 `false`(及其大小写变体),从而减少(但并未完全消除)这类意外。如果不确定某个值会被解析成什么类型,最稳妥的做法是在 YAML 中显式给它加上引号。
常见问题
转换成 JSON 再转回来后,YAML 注释还在吗?
不会保留。JSON 没有注释的概念,所以把 YAML 转成 JSON 会丢弃源文件中的 # 注释。再把这个 JSON 转回 YAML,注释也不会重新出现——这是格式本身的固有限制,不是工具的问题。
工具如何处理 YAML 的锚点和别名(& 和 *)?
底层解析器(js-yaml)在生成 JSON 之前会解析锚点和别名,所以使用 & 锚点和 * 别名来复用一段数据的 YAML 文件,转换成 JSON 后会在每个引用的地方完整展开该数据。
为什么我的 YAML 数字在 JSON 中变成了字符串,或反过来?
如果 YAML 源文件中的值加了引号(例如 version: "3.10"),就会被有意当作字符串处理——这一点很重要,因为不加引号的 YAML 数字(如 3.10)在解析为浮点数时可能丢失末尾的零。如果你确实需要某个值被当作文本处理,请在源 YAML 中给它加上引号。
可以转换包含多个文档(用 --- 分隔)的 YAML 文件吗?
这个工具一次只转换一个 YAML 文档。如果你的文件包含用 --- 分隔的多个文档,请每次转换一个部分,或者如果适合你的场景,先去掉分隔符把它们合并成一个文档。
我的数据会被上传吗?
不会。转换完全在浏览器中通过 js-yaml 库完成——不会向任何服务器发送数据,因此可以放心用于处理包含内部主机名或基础设施细节的真实配置文件。