YAML 转 JSON 转换器

将 YAML 粘贴到左侧,右侧得到 JSON。完全在浏览器中运行,无需上传或注册。

  1. 将 YAML 粘贴到左侧文本区。
  2. 点击「转换为 JSON」。结果显示在右侧。
  3. 复制结果,或点击下载将其保存为 data.json。
  4. 若变换失败,错误信息会指出问题所在的行。
它能做什么?

将 YAML 1.2 文档转换为等价 JSON。映射变成对象、序列变成数组,标量按 YAML 规则被识别为数字、布尔、null 或字符串。锚点和别名在变换过程中被解析。`---` 分隔的多文档流被平展为文档数组。

示例

YAML 输入:

name: Ada
tags:
  - math
  - logic
active: true

JSON 输出:

{
  "name": "Ada",
  "tags": [
    "math",
    "logic"
  ],
  "active": true
}

常见 YAML 错误及修复

YAML 对空白敏感,这是大多数「解析失败」消息的根因。解析器会指出失败的行列号 — 留意以下模式。

  • 使用 Tab 而不是空格。 YAML 1.2 禁止用 Tab 缩进。把所有 Tab 替换为空格 — 大多数编辑器都有「将 Tab 转换为空格」命令。
  • 缩进层级混用。 在 4 空格缩进的同级下出现 2 空格缩进的子项就会失败。选定一种缩进宽度(通常 2 空格)并贯穿整篇文档。
  • 看起来像布尔的字符串。 在 YAML 1.1 中, `yes`、`no`、`on`、`off` 会被解析为布尔 — 在国家代码(著名的「NO」陷阱)和版本字符串中容易出错。请加引号: `country: "NO"`。js-yaml 默认 YAML 1.2 已修复,但来自外部的输入仍可能命中。
  • 未加引号的特殊字符。 以 `- `、`:`、`?`、`&`、`*`、`!`、`|`、`>`、`\'`、`"`、`%`、`@`、`` ` `` 开头的值都需要加引号。最稳妥的做法: 给所有含标点的字符串加引号。
  • 未关闭的引号。 缺少一个 `"` 或 `\'` 会让解析器把后面的内容都视为同一个字符串,直到下一个引号 — 报告的行号通常远离实际位置,容易误导。
  • 锚点 / 别名不匹配。 `*name` 引用的锚点 `&name` 未声明会引发解析错误。检查每个别名是否都有先声明的同名锚点。
常见问题

是否处理 YAML 1.1 的「Norway 问题」之类怪癖?

不处理 — 而且这是有意为之。我们使用 js-yaml 的 YAML 1.2 模式,未加引号的 `NO` 解析为字符串「NO」而非布尔 false。如果输入依赖 YAML 1.1 的布尔行为,请在粘贴前显式加引号。把两套规范混在一个工具里会让数据被悄无声息地误转换。

YAML 锚点和别名会怎么处理?

在转换时被解析。结果 JSON 中的重复值会以普通数据形式存在 — JSON 没有等价的引用语法,所以锚点不会被保留。需要保留引用关系的话,JSON 不是合适的目标格式。

可以转换包含多个文档的 YAML 文件吗?

可以。用 `---` 分隔的多文档 YAML 会被转为 JSON 数组,每个文档对应数组的一个元素。如果文件只有一个文档,则得到顶层的单个 JSON 对象或值。

为什么我的日期字符串变成了 ISO 格式?

YAML 有原生时间戳类型(`2025-12-31`)。解析器会把它读取为 JavaScript Date,并在序列化为 JSON 时输出为 ISO 8601 字符串。要保留原始字面量,请在 YAML 中加引号: `release: "2025-12-31"`。

处理敏感的 YAML 配置安全吗?

安全。一切都在你的浏览器里运行 — 输入由本页 JavaScript 解析与转换,不发送到任何服务器。无日志、无对输入本身的分析、无留存。可在开发者工具验证: 点击转换时不会触发任何请求。

可以处理多大的 YAML 文件?

可以达到浏览器内存上限,但超过约 10 MB 后文本框会变得卡顿。更大的输入请分块转换,或在命令行使用同一个库(js-yaml)。