YAML 转 JSON

全球通用工具

这两个方向其实是同一件事:一份 JSON 文档,和一个含义相同的 YAML 配置块。所以这一页把两者都放进来,用一个下拉框切换——粘贴配置块,得到可以放进 API 调用的 JSON;或者粘贴 JSON 文档,得到可以写进配置文件的 YAML。

默认方向是读取 YAML。切换后可以从 JSON 生成 YAML 配置块。

粘贴整份文档也不会被截断。页面会给出一小段示例,你可以直接替换。

JSON 输出中嵌套块的缩进深度。

留空时按当前方向生成文件名:「formatted.json」或「formatted.yaml」。

边输入边更新。所有计算都在你的浏览器里完成,数据不会离开本机。

对象 转 JSON

11 行

YAML 按配置文件使用的子集读取 —— 映射、序列,以及 null、布尔值、整数、浮点数和带引号的字符串 —— 其余内容一律点名拒绝,而不是猜测。

键数
5
对象数
1
数组数
1
嵌套层级
3

JSON

{
  "name": "danfio",
  "role": "developer",
  "years": 3,
  "active": true,
  "tags": [
    "TypeScript",
    "SQL",
    "devtools"
  ]
}

可以复制,也可以下载。一个值进,一个值出:键保持原有顺序,什么都不会丢。

这些数字没有说明的事

  • 锚点(`&name`)、别名(`*name`)、自定义标签、块标量(`|` 与 `>`)、流式集合和多文档文件都会被拒绝,并给出出错的行号,因为只读一半的配置比拒绝更糟。
  • 未加引号的 `yes`、`no`、`on`、`off` 按配置文件的方式读取:当作布尔值 true 和 false。想保留为文本就加引号(「yes」)。
  • 带引号的字符串使用与 JSON 相同的转义,所以 YAML 里的 `\n` 会变成包含一个换行的字符串。
没有向任何地方发送内容,输入也没有被修改 —— 只是被读取并重新写出。

需要诚实的地方在 YAML 一侧,因为 YAML 是一门大语言,而 JSON 很小。这一页只读取配置文件真正会用到的那部分:映射、序列,以及 null、布尔值、整数、浮点数和带引号的字符串;锚点、别名、标签、块标量、流式集合和多文档文件都会被拒绝,并在出错的那一行点名说明。只读一半的配置比直接拒绝更糟,页面宁可停下来告诉你位置,也不愿交给你一份含义已经变了的文档。

关于这个工具

YAML 完整读下来相当于一门小语言,这一页刻意没有把它整个搬进来。它读取的是配置文件实际使用的那部分交集,并按配置文件的方式推断类型:`yes`、`no`、`on`、`off` 读作布尔值,能按数字解析的值保持为数字,交集之外一律拒绝并给出行号。这样得到的转换器可以放心用在部署配置上,因为它的结果是可复现的,而它的边界就印在每份结果旁边。

反方向更简单,也更可靠:JSON 能表达的每一个值,都是合法的 YAML 值,所以除了格式错误的 JSON,什么都不会被拒绝。键保持原有顺序,数字和字符串不会改变类型,只是看起来像数字的字符串会被加上双引号,以免来回一趟改变含义。两个方向都完全在标签页里运行,不上传任何内容;静态页面本身已经带有示例的真实转换结果,所以在任何人输入之前就已经可用。

它是怎么工作的

配置文件真正用到的那部分子集

读取器认识映射(`key: value` 与嵌套块)、序列(`- item`),以及 null、布尔值、整数、浮点数和带标准转义的双引号字符串这些标量。未加引号的 `yes`、`no`、`on`、`off` 按配置文件的方式读取:当作布尔值 true 和 false。带引号的字符串使用与 JSON 相同的转义,所以 YAML 里的 `\n` 会变成包含一个换行的字符串。

子集之外的内容一律点名拒绝,而不是猜测。锚点(`&name`)、别名(`*name`)、自定义标签、块标量(`|` 与 `>`)、流式集合和多文档文件,都会在拒绝信息里逐项点名,并给出行号;能定位到具体位置时,还会在出问题的地方下方标出插入符。

为什么拒绝“差不多是 YAML”,而不是接受

一个接受“差不多是 YAML”的转换器,会把“差不多是 YAML”喂给读取结果的下游;这种失败往往要等到生产环境才暴露,离造成它的工具已经很远。所以页面提前划好线:上面那个子集才读取,其余内容一律停下,并给出出错的行号和遇到的东西的名称。遇到 `|` 块标量时,拒绝信息会带上行号,并提示改用引号字符串或者改用 JSON——拒绝是打印出来的,而不是被埋掉。

同样的纪律也保护 JSON 一侧的输出:文档被严格解析,尾随逗号、单引号字符串这类错误会被转换成行号、列号、出错的那一行以及一句提示,修起来只需几秒钟。

反方向:JSON 转 YAML

JSON 能表达的每一个值,在这个子集里都是合法的 YAML 值,所以出去的方向很简单:严格解析,然后按选定的缩进写出映射、序列和标量。顺序不会重排,类型不会改变:YAML 说的就是 JSON 说的内容。数字仍是数字,字符串仍是字符串;像 `"007"` 这样带前导零的字符串在这个子集里不是数字,所以保持文本,这一趟不会把它变成数字七。

键保持原有顺序,嵌套深度取决于数据本身的需要,结果以一个换行结尾,可以直接粘贴进配置块。

往返转换,以及从不声称的部分

对于页面能产出的每一个值,把配置读成 JSON 与把 JSON 写回配置互为逆操作,这一点我们在发布前检查过:把配置块转成 JSON 再转回来,得到的仍是同一个值,键的顺序也一致。但对于被拒绝的 YAML,页面不做任何承诺——带锚点的文档会被整体拒绝,而不是部分读取,因为锚点可能在后文被引用。

两个方向都按同一条固定规则处理文本,运行在访问者的浏览器里;离开这台机器的文件,只有访问者主动下载的那些。

示例

示例使用页面自带的默认输入,只改设置;下面的结果与你在页面上看到的完全一致。

配置块变成 JSON 文档

在这里粘贴: name: danfio role: developer years: 3 active: true tags: - TypeScript - SQL

对象 转 JSON

10 行

YAML 按配置文件使用的子集读取 —— 映射、序列,以及 null、布尔值、整数、浮点数和带引号的字符串 —— 其余内容一律点名拒绝,而不是猜测。

键数: 5 · 对象数: 1 · 数组数: 1 · 嵌套层级: 3

映射读成对象,序列读成数组,`3` 仍然是数字。

JSON 变成配置块

转换方向: JSON 转 YAML,从数据得到配置块 · 在这里粘贴: { "name": "danfio", "years": 3, "active": true }

对象 转 YAML

4 行

对象经过严格解析,并按本页的子集写成 YAML —— 映射、序列,以及 null、布尔值、数字和双引号字符串 —— 所以结果可以直接粘贴进配置块。

键数: 3 · 对象数: 1 · 数组数: 0 · 嵌套层级: 2

同一个值写成 YAML,键的顺序保持不变。

看起来像数字的字符串仍是字符串

转换方向: JSON 转 YAML,从数据得到配置块 · 在这里粘贴: {"code": "007", "n": 7}

对象 转 YAML

3 行

对象经过严格解析,并按本页的子集写成 YAML —— 映射、序列,以及 null、布尔值、数字和双引号字符串 —— 所以结果可以直接粘贴进配置块。

键数: 2 · 对象数: 1 · 数组数: 0 · 嵌套层级: 2

前导零在这个子集里不构成数字,所以 `"007"` 保持文本,来回转换不会变成七。

常见问题

我的配置会被上传吗?

不会。转换按同一条固定规则处理文本,在标签页里的 JavaScript 中运行,下载文件是本地创建的 blob。部署配置和 API 响应里常常带有接近凭证性质的值,所以这里完全不接触服务器。

为什么要拒绝锚点、别名和标签?

因为它们是让 YAML 变成一门小型编程语言的部分,只读一半会产出含义不同的文档。这一页读取配置文件真正用到的子集,其余内容一律点名拒绝并给出行号——只读一半的配置比拒绝更糟。

`yes`、`no`、`on`、`off` 会转成布尔值吗?

会,按配置文件的方式读取:未加引号的 `yes`、`no`、`on`、`off` 会变成 true 和 false。这是多数工具遵循的 YAML 1.1 约定。如果想把它们保留为文本,就加引号写成 `"yes"`,和在配置文件里完全一样。

我的 YAML 用了 `|` 块标量,会怎样?

会被点名拒绝,并给出出错的行号和一句处理建议——块标量不在这一页读取的子集内。多行字符串可以改用带 `\n` 转义的双引号字符串,或者改用能完整读取 YAML 的工具来转换这份文档。

JSON 转 YAML 会保留键顺序和类型吗?

会。键保持原有顺序,数字仍是数字,字符串仍是字符串;像 `"007"` 这样带前导零的字符串在这个子集里不是数字,所以保持文本,来回转换不改变含义。你唯一需要选的是缩进宽度。

资料来源与统计口径

  • 读取覆盖配置文件真正会用到的 YAML 1.1 子集:映射、列表、带引号的字符串、数字与布尔值;写出则遵循 RFC 8259 的严格 JSON。
  • 锚点、别名、自定义标签与块标量会按名称拒绝并给出行号,因为只读一半的配置比拒绝更糟。
  • 两个方向都在你的浏览器里完成,不上传任何内容。

最近复核于 2026-10-07.

本页在您的浏览器本地运行,请保留原文件备份;不涉及财务建议。 阅读完整免责声明。