JSON 转 YAML 转换器

将 JSON 粘贴到左侧,得到使用一致缩进的 YAML 1.2。完全在浏览器中运行 — 无需上传。

  1. 将 JSON 粘贴到左侧文本区。
  2. 点击「转换为 YAML」。结果显示在右侧。
  3. 复制结果,或点击下载将其保存为 data.yaml。
  4. 若 JSON 无效,错误信息会指出错误位置。
它能做什么?

将 JSON 转换为等价的 YAML 1.2。对象映射为 mapping、数组映射为 sequence,数字/布尔/null/字符串保留各自类型。输出默认使用 2 空格缩进、100 列行宽。JSON → YAML → JSON 往返时数据语义保持一致;但注释与排序细节是 JSON 端的固有限制。

示例

JSON 输入:

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

YAML 输出:

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

常见 JSON 错误及修复

此工具能转 YAML 的前提是 JSON 必须有效。解析器会指出失败的行列号 — 几乎所有「无效 JSON」错误都来自这些模式。

  • 末尾逗号。 `{"a": 1, "b": 2,}` 无效。JSON 不允许在对象或数组的最后一个元素之后写逗号。
  • 单引号。 `{'a': 1}` 无效。JSON 字符串和键必须用双引号。
  • 未加引号的键。 `{a: 1}` 无效 — JavaScript 对象字面量允许,但 JSON 不允许。请把键用双引号包裹。
  • 注释。 严格 JSON 不支持 // 或 /* */ 注释。请在转换前去掉,或在 YAML 输出中(支持 # 注释)手动加回。
  • 智能引号。 从文档处理器复制粘贴时, " 有时会被替换为弯引号 — JSON 不接受。请重新输入,或先经过纯文本编辑器。
  • NaN / Infinity。 JSON 没有 NaN、Infinity、-Infinity 的表示。若数据中包含,请选择: 序列化为 null(丢失信息),或字符串 "NaN"(保留意图但改变类型)。
常见问题

为什么 YAML 输出中没有注释?

JSON 没有注释语法,所以没有可继承的注释。需要带注释的 YAML 请在转换后手工编辑。某些团队会用 `_comment` 字段在 JSON 中编码注释,但它们在 YAML 中也只是普通键,而不是真正的注释。

键的顺序会被保留吗?

会。JSON 对象的键顺序作为 YAML mapping 的顺序原样保留 — 与现代浏览器中 JSON.parse + JSON.stringify 的插入顺序行为一致。需要按字母排序请先排序 JSON。

深层嵌套结构如何格式化?

YAML 输出每层使用 2 空格缩进,序列采用 block 风格(每行一项,以 `-` 开头)。空对象和空数组分别以流式 `{}` 与 `[]` 表示 — 因为空时 block 风格会有歧义。

支持二进制数据吗?

JSON 没有原生二进制类型,所以输入中通常已经是 base64 字符串。输出 YAML 也保留这个字符串。如果你确实需要 YAML 的 `!!binary`,本转换不会生成 — 仍建议保留 base64 字符串方案。

把 API 密钥这类敏感 JSON 放进来安全吗?

安全。一切都在你的浏览器里运行。输入由本页 JavaScript 解析转换,不与任何服务器通信。可在开发者工具验证 — 点击「转换」时不会触发任何网络请求。

可以 JSON → YAML → JSON 往返吗?

数据层面可以 — 语义保持一致。逐字节相同则不行 — 空白和引号会被规范化。如果需要稳定的标准形式,请在粘贴前用排序后的键执行 JSON.stringify。