关于 JSON 转 YAML
JSON 与 YAML 表达的是同一类数据(映射、序列、标量),但服务的人群不同:JSON 面向程序解析,标点严格、不允许注释;YAML 面向人编写,用缩进代替括号、允许注释、支持多行字符串。Kubernetes 清单、CI 流水线、Ansible 剧本、Docker Compose 都是 YAML,而接口返回与前端配置几乎都是 JSON。于是「把接口返回的 JSON 变成可以直接写进配置文件的 YAML」成了排障与搭建环境时的日常动作。 转换原理是把 JSON 解析成内存中的对象树,再按 YAML 的规则重新序列化:对象变成键值对,数组变成以短横线开头的列表,字符串按需加引号,多行字符串改用竖线或大于号表示。全程在浏览器内完成,不需要任何服务端参与,因此可以断网使用,也不会把配置内容发到外部。 使用要点有几个。缩进宽度建议固定为 2 空格——YAML 不允许用制表符缩进,混入制表符会直接解析失败,而很多编辑器在粘贴时会把空格自动转成制表符,务必检查。字符串里若出现冒号、井号、前导空格或以数字开头,必须加引号,否则会被解释成键或注释,这类错误在中文内容里尤其常见。键的顺序:JSON 对象无序,转换后通常保留插入顺序,但不要把它当作契约,需要稳定顺序时应显式排序。 边界与限制值得单独说明。JSON 允许一个文件里只有一个顶层值,因此转换结果也只有一个顶层节点;如果手上有多个 JSON 文件想合并成一份 YAML,需要先自行合并成数组或映射。精度方面,超过 2 的 53 次方减一的整数会在 JSON 解析阶段就丢失精度,源数据里的雪花 ID 转成 YAML 后末位已经变零,这不是转换器的问题,而要在数据源头改。日期时间在 JSON 里只是字符串,YAML 有专门的时间类型,某些解析器会自动把形如 2026-01-01 的字符串转成日期对象,若下游按字符串处理就会报类型错误,稳妥做法是加引号强制为字符串。 数据与隐私:要转换的内容往往是包含数据库地址、密钥、内网域名的部署配置,属于最不该外泄的一类材料。本工具全部在浏览器内完成解析与序列化,不发送任何请求;转换前可以先断开网络,或在开发者工具的网络面板里确认整个过程中没有任何带载荷的请求发出。
放进 Helm、Kustomize 这类模板工具时还要意识到一层区别:模板会在渲染阶段再做一次替换,因此在模板里写的字符串可能被再次解释。若某段文本包含模板语法符号(双大括号),必须先转义或改用变量注入,否则转换看起来成功、渲染时却报找不到变量。交接时把「转换后仍需人工确认的三处」写进变更说明,能让评审与回滚都快得多。 一个容易被忽略的细节是键名大小写:YAML 本身对键名大小写敏感,但某些框架在读取后会把键名转成小写,于是 camelCase 的键在运行时变成全小写导致取值失败,交接时把键名规范写进文档可以省掉一轮联调。
实现原理
转换把 JSON 解析成对象树,再按 YAML 规则序列化:映射用缩进表达,序列用以短横线开头的条目表达,多行字符串改用块标量。两者的表达力差异在于 YAML 允许注释与锚点、且有隐式类型(不加引号的 yes/no 可能被读成布尔值),因此转换后仍应核对类型是否被隐式规则改写。
{"name":"oltool","tags":["a","b"]}name: oltool
tags:
- a
- b使用方法
- 打开「JSON 转 YAML」
- 选择源格式与目标格式
- 根据需要调整输出选项
- 点击「转换」按钮,结果实时显示
- 复制或导出结果
使用场景
- K8s 配置编写 — 把接口返回的 JSON 配置转成带缩进的 YAML,直接粘进 Deployment 或 ConfigMap。
- CI 流水线迁移 — 将旧的 JSON 格式构建配置转为 GitHub Actions / GitLab CI 要求的 YAML。
- 配置可读化 — 把冗长的单行 JSON 转成 YAML,方便 code review 时逐行查看差异。
- 反向校验 — 把手写 YAML 转回 JSON,验证缩进是否正确、有无隐藏的类型错误。
- 文档示例 — 在技术文档里同时给出 JSON 和 YAML 两种写法,照顾不同读者习惯。
- Ansible 变量整理 — 把字典形式的变量定义转成 Ansible 剧本可用的 YAML 语法。
常见问题
YAML 的缩进必须是空格吗?
是。YAML 规范禁止用 Tab 缩进,本工具输出统一使用 2 个空格。如果你的 YAML 报错,先检查是不是混入了 Tab。
注释能保留吗?
JSON 标准不支持注释,所以 JSON→YAML 时没有注释可带;而 YAML→JSON 时注释会被丢弃,因为目标格式无法承载。
多行字符串怎么处理?
本工具会用 YAML 的块标量语法(| 或 >)输出较长的多行文本,保持换行结构清晰可读。
转换后键的顺序会变吗?
不会。本工具保持原始键的插入顺序,不做字母排序,方便你对照原文。
on、yes 这类值会不会被当布尔?
会。YAML 1.1 会把 on/off/yes/no 当布尔,若值本身确实是这样的字符串,请在输入 JSON 前给它们保留为字符串形式并在转换后核对。
想转成 TOML 怎么办?
请使用本站的「JSON 转 TOML」或「YAML 转 TOML」工具,同样支持本地无损转换。
转换后引号消失了,字符串会被误解析吗?
YAML 按内容自动决定是否需要引号,纯数字样式的字符串(如版本号 "1.0")会被加上引号保护,普通文本则省略。极少数边界(以特殊符号开头的短串)可能需要手动补引号,转换后抽查一遍高风险字段即可。
多行文本被折成 | 或 > 了?
长文本会转成 YAML 的块标量:| 保留换行,> 折叠为单行。两者语义不同——保留换行用 |,拼接成一句用 >。转换器按原文是否含换行选择,如与预期不符手动改这一个符号即可,其余结构不受影响。