跳到正文

JSON ⇄ YAML 互转

JSON ⇄ YAML

双向转换并保住键的顺序,YAML 一侧可选块状或流式写法。

在浏览器里把 YAML、JSON 和 TOML 朝任意方向互转。解析器是为本站专门写的,不是从 npm 拉来的,所以页面能明确列出它拒绝什么——锚点、标签、多文档流——而不是悄悄读错。

🔒 完全在你的浏览器里运行jsonyamlconvert
输入格式
正按 YAML 读取。
输出格式

输入

拖入 .yaml、.json 或 .toml 文件

在这个标签页里读取,不上传。

JSON 输出

是在这里写的,不是从 npm 装的,所以支持的子集是挑出来的而不是继承来的。凡是这张清单上的东西,都会点名拒绝,而不是读错。

怎么用

  1. 粘贴配置

    格式从文本里检测,选择器下方的标签会说它判定的是哪一种。猜错了就手动覆盖——JSON 文件同时也是合法的 YAML,所以一份 `{ }` 文档两边都说得通。

  2. 选目标格式

    Kubernetes 清单或 CI 文件用 YAML,任何要被程序解析的东西用 JSON,Rust 或 Python 的项目文件用 TOML。

  3. 读警告,不要只看输出

    一次成功的转换仍然可能改变了含义——进 TOML 的路上丢掉的 `null`,在 YAML 1.2 下被读成字符串的 `yes`。这些会出现在输出下方的说明里,而不是被藏起来。

  4. 被拒绝时打开范围列表

    底部折叠的部分列出了这些解析器不处理的每一种结构,以及原因。一次拒绝会指向那个列表,而不是抛出一个要你自己解读的解析错误。

常见问题

为什么我的锚点和别名被拒绝了?

因为正确展开 `*base` 意味着实现 YAML 的合并语义,而那里出一点细微的错,就会产生一份看起来对、部署出去却是另一回事的文件。粘贴之前手工展开是可靠的;靠猜不可靠。`<<: *base` 也是同样的原因。

为什么 `yes` 变成了字符串?

因为 YAML 1.2 的核心 schema 说它就是字符串——只有 `true` 和 `false` 是布尔值。YAML 1.1 的解析器,包括一些仍在生产环境里的,把它读成布尔值。这个差异出现时会在警告里指出,因为它正是会改变一次部署的那类东西。

`null` 转到 TOML 会怎样?

会被丢掉,并有一条警告说明。TOML 根本没有 null 值,所以选择只有省略这个键或编一个占位符,而编一个占位符会把字面的 `"null"` 字符串放进别人的配置里。

注释会保留吗?

不会。转换要经过一个数据模型,而注释不是数据——JSON 根本没有放注释的地方。如果你需要注释,本站的 YAML 和 TOML 格式化工具是原地重排缩进的,会保留它们。

可以从这些接进来

接下来

这些工具吃得下当前工具的产出,结果可以直接送过去。