YAML ⇔ JSON 转换器
在 YAML 和 JSON 之间相互转换。适用于配置文件格式转换以及 Kubernetes manifest、Docker Compose、GitHub Actions、OpenAPI 的编辑。
完全免费
无需注册
浏览器内完成
5 种语言
深色模式
支持的格式
- 符合 YAML 1.2(使用 js-yaml 库)
- JSON 输出已格式化并验证
- 多文档(
---分隔):仅转换第一个文档 - YAML 锚点(
&/*)也支持
已复制
如有问题或显示异常,请通过以下方式联系我们: 联系表单反馈给我们。
📖 常见的坑
使用 js-yaml(遵循 YAML 1.2)在 YAML 与 JSON 之间互相转换,支持锚点与别名、多文档,以及语法错误的行号提示。处理全部在浏览器内完成。YAML 的难点不在语法,而在那些你从未要求、却悄悄发生的类型转换——本想作为字符串的值变成了数字或布尔值,而且不会报错,于是你只能在东西跑不动之后才去找原因。
| 情形 | 会发生什么 | 怎么处理 |
|---|---|---|
| 本想当字符串的值变成了数字或布尔值 | YAML 会根据不带引号的值的外观来猜测类型并转换。常见的翻车:version: 1.10 变成数字,等于 1.1;zip: 0070 可能被当成八进制;country: NO(挪威)在 YAML 1.1 下是 false;GitHub Actions 工作流的 on: 键在 1.1 下会变成名为 true 的键。本工具遵循 YAML 1.2,所以 NO 与 on 仍是字符串——但 Python 的 PyYAML 默认行为和 Ruby 的 Psych 至今仍相当于 1.1,因此同一份文件在不同实现下含义不同。 |
拿不准就加引号。尤其是版本号、国家代码、邮编、以 0 开头的数字、yes/no/on/off/true/false、null/~,以及含 : 或 # 的值,务必加引号。加引号不是啰嗦,而是意图的明示——评审时若有人问「为什么只有这里加了引号」,那是个好问题,答案是「因为我确定这个值是字符串」。把配置文件提交进仓库之前,先转成 JSON 用眼睛核对一遍类型——本页的转换结果里如果出现的是 1.1 而非 "1.1",那就是事故的预兆。 |
| 锚点与别名被展开,引用关系消失了 | 用 &defaults 定义、再用 <<: *defaults 引入,是消除 YAML 重复的强力手段,但 JSON 里没有这个概念。因此转换时所有合并都会被真正展开,生成同样内容反复出现的 JSON。这一步还在预期之内;问题出在再转回 YAML 的时候——锚点不会被还原,原本写得很 DRY 的配置文件,变成了一份全部铺开的冗长文件。在 docker-compose.yml、.gitlab-ci.yml 这类大量使用共享定义的文件里,行数会翻好几倍。 |
不要让配置文件来回转换。正确的流程是把 YAML 作为正本来编辑,JSON 仅作为「交给机器的最终输出」来生成——CI 以 JSON 形式调用 API 正是这种用途。如果你拿到的是一份锚点已经丢失的 YAML,没有任何机械化的还原办法——只能靠肉眼找出重复处,再手工抽取成锚点。正因如此,请在仓库里明确哪一份才是正本——如果要提交生成的 JSON,就放到 generated/ 之类的目录下,或在文件头写上「自动生成,请勿编辑」,事故就会少很多。 |
| 缩进报错,却怎么也改不对 | YAML 不接受制表符作为缩进——编辑器设置里混进一个制表符,就必定失败,而且在屏幕上与空格毫无区别。更麻烦的是报错所指的行号:YAML 解析器报告的是它「察觉到结构矛盾」的那一行,因此真正出错的位置常常在其上方几行乃至几十行。在嵌套很深的 Kubernetes 清单里,被告知「第 120 行有错」,从第 118 行开始找却什么也找不到,原因就在这里。 | 首先请在编辑器里启用「制表符转空格」——在 .editorconfig 中写上 [*.yml] indent_style = space,就能保护整个团队。追查错误时,请从报错行往上读,找那个缩进恰好错了一级的地方。另外,列表缩进允许两种写法——- 与父级同列,或往里缩两格——两者都正确,但在同一个文件里混用,人就会读错。把 yamllint 放进 CI,这类问题在写下的那一刻就能被发现,比运行时才崩要便宜得多。 |
在服务端解析来自外部的 YAML 时,务必使用安全加载器。Python 的 yaml.load() 能够构造任意 Python 对象,因此喂给它精心构造的文档会导致代码执行——请使用 yaml.safe_load()。js-yaml 从 v4 起把安全行为设为默认,但仍在使用旧版本的项目必须显式调用 safeLoad。本页在浏览器中运行,等同于安全模式,因此不必担心。其次,请留意多文档的处理:Kubernetes 用 --- 分隔,把多个资源放进同一个文件,而 JSON 没有「多文档」的概念,于是它们变成了数组。转回 YAML 时若忘了恢复 --- 分隔,kubectl apply 会以「数组不是合法的 Kind」为由拒绝——若你的流水线中夹着转换步骤,请务必为这一情形编写测试。
📖 使用方法
-
1
粘贴输入在左侧粘贴 YAML 或 JSON,右侧自动更新。
-
2
切换方向选择方向和缩进宽度。
-
3
检查验证错误语法错误会显示行号和原因。
❓ 常见问题
支持 YAML 锚点和别名吗?
是。使用 js-yaml 库。
支持多文档 YAML 吗?
多文档会转换为 JSON 数组。
适用于 Docker Compose / K8s 清单吗?
是。无损转换。
YAML Norway bug 如何处理?
使用 YAML 1.2,不会出现。
🐛 此工具出现问题了吗?
免费、无需注册。仅提供复现步骤也有帮助。报告将直接发送给运营者并用于改进。
✅
感谢您的反馈!
已送达运营者,将用于改进工具。