YAML JSON 转换器
即时进行 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,并支持时间戳。下列输入的转换结果如下:
| YAML | JSON | 说明 |
|---|---|---|
country: NO | "NO" | 字符串。PyYAML 等 YAML 1.1 解析器会读成 false |
enabled: yes | "yes" | 同上;布尔值请写 true |
version: 1.10 | 1.1 | 按数字解析;版本号请加引号 |
mode: 0755 | 755 | YAML 1.2 里前导 0 不表示八进制;请写 0o755 |
zip: 01234 | 1234 | 前导 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 运行,数据不会离开您的设备。