YAML 转 JSON / JSON 转 YAML — 不保留注释的配置转换器
在浏览器里把 Kubernetes、docker-compose、GitHub Actions 等 YAML 配置转成 JSON,也能反向转回去。这是重新序列化,不是无损往返:注释、锚点和多文档结构都会丢失,未加引号的值按 YAML 类型规则解析。
这个转换器做什么,以及会丢掉什么
两个方向,各一个按钮
YAML → JSON 与 JSON → YAML 是两个独立操作,结果直接覆盖另一侧编辑区,不会与已有内容合并。
注释一定会丢
解析时 YAML 注释被丢弃,生成的 YAML 也不会写注释;JSON 本身就没有注释语法。
锚点会展开,多文档会报错
&anchor / *alias 会被解析成重复的对象;一个文件里出现多个 --- 文档会直接报错,而不是合并输出。
按 YAML 1.2 的类型规则解释
未加引号的 1.0 会变成 1,2024-01-01 会变成 ISO 时间字符串,.inf 和 .nan 会变成 null;要保留字符串请加引号。
本地运行,可读文件、可下载
文件在浏览器里读取,不会上传。没有硬性大小限制,但超大文件转换时会卡住页面。
YAML ↔ JSON 转换常见问题
这个转换是双向的吗?
是,两个按钮分别对应两个方向。但每次转换都是重新序列化:注释、排版和锚点都不会保留;生成的 YAML 固定 2 空格缩进、80 列折叠,没有缩进或排序选项。
注释能保留吗?
不能。解析时 YAML 注释被丢弃,生成的 YAML 也不会补注释,JSON 本身没有注释语法。请把带注释的文件当作唯一来源,输出只当派生数据。
支持锚点、别名和多文档吗?
锚点和别名会被解析并展开成重复的值。多文档(多个 ---)会报 expected a single document in the stream,需要先拆分;Kubernetes 一个文件里放多个资源的清单就属于这种情况。
为什么 version: 1.0 变成了 1,yes 反而还是字符串?
未加引号的标量按 YAML 规则推断类型:1.0 是数字,输出就是 1。js-yaml 遵循 YAML 1.2,yes/no/on/off 都是普通字符串,所以 GitHub Actions 的 on: 键不会被转成布尔值。必须保留字符串时请加引号。
日期、大整数和 null 怎么处理?
未加引号的 2024-01-01 会被解析成时间,JSON 里变成 2024-01-01T00:00:00.000Z。超过 2^53 的整数会丢精度,.inf/.nan 变成 null,~、null 和空值都变成 null。
能处理 Kubernetes、docker-compose、GitHub Actions 文件吗?
标准单文档 YAML 都能处理,包括这些格式。多文档的 Kubernetes 导出要先拆开;另外注释会丢,不要把转换结果直接当作要提交的配置文件。
有大小限制吗?文件会上传吗?
全部在浏览器里完成,不上传文件。没有配置上限,但转换在主线程同步执行,几 MB 的文件可能让页面卡住。

