JSON ↔ YAML 转换
在浏览器里把 JSON 转成 YAML、或把 YAML 转回 JSON,处理 Kubernetes、CI 配置、Docker Compose 时常用。
输入
输出
支持的 YAML 子集(够覆盖绝大多数配置文件)
标量(字符串 / 数字 / true / false / null / ~)、嵌套映射、
- 列表、单双引号字符串、
# 注释(直接跳过)、| 与 > 块字符串、--- 文档起始、简单的
{} [] 流式写法。
明确不支持
锚点与别名(
&x / *x)、合并键 <<、标签(!!str)、
复杂键 ?、%YAML 指令、多文档(--- 之后还有第二份)。多行字符串会统一输出成
"...\n...",不生成块标量。宁可报错,也不静默地把你的配置改坏。
什么时候用,怎么用
三个场景最常见:把接口返回的 JSON 改写成 Kubernetes / GitLab CI 的 YAML;把运维给的 YAML 转成 JSON 塞进程序或 jq;排查「YAML 缩进写错导致解析失败」时先转成 JSON 看结构对不对。
把文本贴进左边,输出自动刷新,不用点按钮。方向默认是自动:第一个非空字符是 {、[ 或 " 就按 JSON 解析,否则按 YAML。含 --- 开头、或 JSON 里带注释的输入,手动选方向更稳。YAML 输出用 2 空格缩进,序列统一缩进一层(不顶格),这样嵌套再深也不会看错层级。
常见坑
- 缩进必须用空格,Tab 会直接报错——YAML 规范禁止用 Tab 做缩进。
- YAML 的键值分隔符是冒号加空格。
a:1不是一个映射,它会被当成普通字符串。 - 注释一律丢弃。JSON 没有注释语法,所以转过去也带不回来。
- 未加引号的
yes/on/no按 YAML 1.1 是布尔值,但很多解析器按 1.2 当字符串。要确定就加引号。 - 像
1.10、0755这种值会被当成数字,转换后可能变成1.1、755。版本号和权限建议一律加引号。 - 键名里的
.、-、中文都不影响 YAML,但输出成 JSON 后调用方可能不方便取,建议保持简短。
常见问题
YAML 转 JSON 后,原来的注释去哪了?
被丢弃了。JSON 语法里没有注释,任何解析器都留不住它。如果你需要保留说明,只能另存一份注释文档,或者用 YAML 里一个约定俗成的
_comment 字段。JSON 里超过 2^53 的大整数转 YAML 会不会丢精度?
会。JavaScript 的数字是双精度浮点,超过 9007199254740991 的整数不再精确,例如
1234567890123456789 会变成 1234567890123456800。订单号、雪花 ID、身份证号这类值请当成字符串传,加引号包起来。多行字符串在 YAML 里怎么输出?
统一输出成双引号字符串,换行写成
\n,例如 "第一行\n第二行"。这是所有 YAML 解析器都认的写法。本工具不生成 | 或 > 块标量,因为块标量的缩进规则很容易被手工编辑破坏。支持 & 锚点、* 引用和 << 合并键吗?
不支持,输入里出现这些语法会直接报错并给出大概位置。这是刻意的:锚点展开需要一整套语义规则,实现不全就会静默丢字段,那比报错危险得多。请先在支持锚点的解析器里展开,再贴进来转。
YAML 里的 1.0 转换后为什么会变成 1?
因为 YAML 把它识别成了数字
1.0,转成 JSON 后是数值 1,再输出 YAML 时按最短形式写回 1。凡是「文本形态有意义」的值(版本号、编号、IP 段),都加引号写成字符串。