YAML JSON 转换器

即时进行 YAML 与 JSON 格式互转。支持嵌套对象、数组、多行字符串。免费在线工具,在浏览器中处理。

  • 在浏览器中处理
  • 数据不离开你的设备
  • 免费 · 无需注册
清空两个面板、状态和等待执行的转换。焦点在工具内时,Ctrl+L(Mac 为 ⌘+L)也会清空。
在此粘贴一个 YAML 文档。停止输入 0.3 秒后,JSON 面板会更新,并使用两个空格缩进。遇到 JSON 无法原样保存的值时会停止转换,并按字段路径列出原因。
复制 YAML 面板内当前的全部文本,包括您编辑的内容。面板为空时无法复制。
在此粘贴 JSON。停止输入 0.3 秒后,YAML 面板会更新,并使用两个空格缩进。长行不会自动折叠。
复制 JSON 面板内当前的全部文本,包括您编辑的内容。面板为空时无法复制。
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。

转换示例

简单对象

输入 YAML:

name: Alice
age: 30
active: true

输出 JSON 包含 name、age 和 active 字段。

嵌套结构与数组

输入 YAML:

server:
  host: localhost
  port: 8080
  features:
    - auth
    - logging
    - cache

输出 JSON 包含嵌套的 server 对象,含 features 数组。

往返转换

将 JSON 输出粘贴回 JSON 面板,停止输入 0.3 秒后,YAML 面板会更新。注意,YAML 注释和格式偏好在往返转换中不会保留。

YAML 与 JSON 对比

YAML(YAML Ain’t Markup Language)是一种人类友好的数据序列化格式,广泛用于配置文件(Docker Compose、Kubernetes、Ansible、GitHub Actions)。 JSON(JavaScript Object Notation)是 API 和 Web 服务中最常用的数据交换格式。 两者可以表示相同的数据结构——本工具在两者之间转换,注释、锚点和部分标量值会在转换中改变,见下文「类型会变的值」。

类型会变的值

本工具使用 js-yaml 4.3.2,遵循 YAML 1.2 core schema,并支持时间戳。下列输入的转换结果如下:

YAMLJSON说明
country: NO"NO"字符串。PyYAML 等 YAML 1.1 解析器会读成 false
enabled: yes"yes"同上;布尔值请写 true
version: 1.101.1按数字解析;版本号请加引号
mode: 0755755YAML 1.2 里前导 0 不表示八进制;请写 0o755
zip: 012341234前导 0 丢失;这类编码请加引号
date: 2026-09-29"2026-09-29T00:00:00.000Z"日期变成完整的 UTC 时间戳
at: 2026-10-01T09:30:00+09:00"2026-10-01T00:30:00.000Z"偏移换成 UTC。JSON 没有日期类型,输出 UTC 的 ISO 8601 文本:时刻相同,但原来写的 +09:00 不保留
zero: -0.0-0.0负零保留负号(只用 JSON.stringify 会写成 0)
empty:null没有值的键是 null

限制

  • 一次只转换一个文档。 含 --- 分隔的输入会报错 expected a single document in the stream, but found more。

  • JSON 或 YAML 无法保存的值会停止转换。 YAML 的 .inf、-.inf、.nan,以及任一方向超出 ±(2^53 − 1) 的整数,在转换中会改变(JSON.stringify 写成 null,JSON.parse 和 js-yaml 会把大整数四舍五入)。状态栏按 JSON Pointer 列出每个字段。下面的 YAML:

    size: .inf
    id: 9007199254740993

    得到 未转换:JSON 无法原样保存下列值:/size:inf 在 JSON 中没有写法(JSON.stringify 会写成 null);/id:整数 9007199254740993 超出 ±(2^53 − 1),JavaScript 会把它四舍五入。1e400 这类超出双精度范围的 JSON 数字同样列出。大 ID 请加引号。输出面板会清空,复制按钮停用,直到输入可以转换。

  • 日期必须存在,时间只保留到毫秒。 js-yaml 用 Date.UTC 构造日期,会把 2026-02-31 顺延成 3 月 3 日,并且只保留到毫秒。这类时间戳会停止转换。下面的 YAML:

    due: 2026-02-31
    at: 2026-10-01T09:30:00.123456Z

    得到 未转换:JSON 无法原样保存下列值:/due:2026-02-31 不是有效的日期或时间;/at:2026-10-01T09:30:00.123456Z 的精度超过毫秒。本意是文本的值请加引号(due: "2026-02-31")。有效的日期时间按上表转换成 UTC。

  • js-yaml 的处理上限。 js-yaml 4.3.2 遇到嵌套超过 100 层、合并键(<<)累计处理的映射和键超过 10,000 个、一个合并键列出超过 100 个映射的文档会停止,例如 无效 YAML: 集合嵌套超过 100 层(js-yaml 默认上限) (1:103)。

  • 重复的键会报错(duplicated mapping key),不会静默覆盖。

  • 注释和锚点不保留。 锚点和 << 合并键会展开成普通的副本。

  • JSON 整数 -0 写成 0。 {"count":-0,"offset":-0.0} 得到 count: 0 和 offset: -0.0:YAML 1.2 把 -0 读作整数零,-0.0 仍是负的浮点零。

  • JSON → YAML 时会给有歧义的字符串加引号,例如 '1.10'、'yes'、'NO',再读回来仍是字符串。

FAQ

支持哪些 YAML 特性?

支持所有标准 YAML 1.2 特性,包括嵌套对象、数组、多行字符串(字面量和折叠式)、锚点、别名以及所有标量类型(字符串、数字、布尔值、null、日期)。

可以转换多文档 YAML 吗?

不能。含 --- 分隔的多个文档时会报错 expected a single document in the stream, but found more。请一次转换一个文档,或用 YAML 验证器逐个检查文档。

YAML 数据类型如何映射到 JSON?

YAML 字符串映射为 JSON 字符串,数字保持不变,布尔值映射为 true/false,null 映射为 null,日期映射为 ISO 字符串,序列/映射映射为数组/对象。.inf、.nan、超出 ±(2^53 − 1) 的整数、2026-02-31 这类不存在的日期和精度超过毫秒的时间无法原样写入 JSON,工具会停止转换并列出这些字段。

数据会发送到服务器吗?

不会。所有转换在浏览器中通过 JavaScript 运行,数据不会离开您的设备。