关于 YAML 转 JSON
把 YAML 转成 JSON 通常出现在两种场合:一是要把 Kubernetes 清单或 CI 配置送进只接受 JSON 的接口(很多云平台的 REST API 只吃 JSON),二是要在代码里可靠地读取 YAML 配置——YAML 的隐式类型规则太多,不同语言实现的解析结果可能不一致,先转成 JSON 再解析能消除这类不确定。 转换原理是把 YAML 文本解析成对象树,再按 JSON 的规则序列化。关键差异在于 YAML 有一批隐式类型:不加引号的数字会被解析成数字类型,yes 与 no 在旧版规范里会被解析成布尔值,形如 1.10 的值可能被当作数字而丢掉末尾的零,十六进制与科学计数法也各有规则。转换器会忠实输出解析结果,因此「看起来是文本却变成了数字」这类现象要回到 YAML 源头用引号固定。 使用要点:转换后务必核对三类值——版本号、以零结尾的编号、以及形如 no 或 on 的短字符串,它们最容易被隐式类型规则改变形态;如果配置文件里本来用引号包住,转换后应当仍然是字符串,若变成数字说明源文件缺少引号。缩进错误是最常见的解析失败原因,YAML 不允许制表符、要求同级元素缩进完全一致,报错信息往往只给出行号而不指出真正的根因,建议先用编辑器把制表符替换为空格再排查。 边界与限制:YAML 支持锚点与别名(& 与 *)来表达复用,也支持多文档(用三个短横线分隔)。转换到 JSON 时,锚点会被展开成重复内容,文件体积因此变大;多文档则必须拆成多个 JSON 文件或包成数组,否则只有一个文档会被处理。注释在转换中必然丢失,这是格式本身的能力差异,不是工具缺陷,需要保留说明的场合应把说明写进字段值或另存文档。此外 YAML 的规范有 1.1 与 1.2 两个版本,对 yes/no、八进制数字的处理不同,跨系统交换时应确认双方使用的版本。 数据与隐私:需要转换的配置往往包含数据库口令、云厂商密钥与内网地址。本工具在浏览器内完成解析与转换,不上传任何内容,也不需要联网;转换完成后建议立即核对输出中是否意外带有本应被锚点或环境变量替代的敏感值。
与校验环节配合时要注意顺序:先用 JSON Schema 校验转换后的结果,再交给业务逻辑,比在 YAML 层面校验更稳定,因为 JSON 没有隐式类型与锚点这些容易误判的特性。流水线中也常见另一种用法——把配置转成 JSON 后用工具做字段级 diff,能避免锚点展开造成的整段误报。转换完成到提交之间保留一次人工通读,仍然是性价比最高的防线。 还有一点值得记住:转换只是形态变化,不校验语义。字段名拼错、必填项缺失、枚举取值超出范围,转换器都不会报错,因此转换通过不等于配置正确,仍应有一道独立的校验环节。 最后,把常用配置的转换结果纳入版本管理并写清变更原因,能让「谁在什么时候改了哪个字段」在事后可追溯,这一点在多人协作的环境里比任何工具功能都重要。
实现原理
反向转换的关键是隐式类型规则:不加引号的数字会被解析成数值、以零开头的编号可能被当成数字而丢掉前导零、形如日期的字符串可能被提升为时间类型。因此「看起来是文本却变成了数字」这类现象要回到源文件用引号固定,而不是在转换结果里补救。锚点与别名会被展开成重复内容。
id: 007
flag: no{"id":7,"flag":false}(两个值都被隐式规则改写了类型)使用方法
- 打开「YAML 转 JSON」
- 选择源格式与目标格式
- 根据需要调整输出选项
- 点击「转换」按钮,结果实时显示
- 复制或导出结果
使用场景
- 配置入库 — 把 YAML 配置转成 JSON 后写入数据库或通过 API 提交,避免后端额外引入 YAML 解析库。
- 调试 K8s 清单 — 将 kubectl 导出的 YAML 转 JSON,用 jq 或 JSONPath 提取特定字段。
- 前端读取配置 — 浏览器原生支持 JSON.parse,把 YAML 转成 JSON 后前端可直接消费。
- 锚点展开 — 把使用了 YAML 锚点复用的配置展开成完整 JSON,看清实际生效的值。
- 格式校验 — 转换失败即说明 YAML 语法有误,本工具可当作快速 lint 工具。
- 测试夹具 — 用 YAML 简洁地编写测试数据,再转 JSON 供单元测试 fixture 使用。
常见问题
支持多文档 YAML 吗?
支持。用 --- 分隔的多文档 YAML 会被转换为 JSON 数组,每个文档对应数组中的一个元素。
YAML 锚点和引用会怎样?
会被完全展开。&anchor 定义和 *ref 引用在转成 JSON 时会还原为实际的重复内容,因为 JSON 不支持引用机制。
日期、布尔值会被自动识别吗?
会。YAML 的 true/false、null、数字、日期会按类型转换;如果想保留为字符串,请在 YAML 中加引号。
为什么提示缩进错误?
YAML 对缩进极其敏感,同级元素必须对齐且不能用 Tab。错误提示会给出具体行号,按提示检查即可。
多行块标量怎么转换?
| 和 > 保留的段落在转 JSON 时会变成一个包含真实换行的字符串,">"折叠模式的换行会被规范为空格。
能再转回 YAML 吗?
可以,请使用本站的「JSON 转 YAML」工具完成反向转换。
报错「重复键」,但 YAML 里明明是两段不同内容?
YAML 允许同一映射里出现重复键(后者覆盖前者,多数实现如此),JSON 规范要求键唯一。工具检测到重复键即报错而不是静默覆盖,避免数据悄悄丢失。修正源文件里的重复键即可。
锚点(&)和引用(*)转换后变成了什么?
锚点会在解析阶段展开成实际值,所以 JSON 里看到的是展开后的完整数据,没有 & 与 * 标记。这是正确行为:锚点只是 YAML 的书写捷径,不是数据的一部分。