YAML 语法验证器
在线验证 YAML 语法,精准定位错误行号和列号,验证成功后预览解析结构。免费,在浏览器中处理,数据不离开本地。
- 在浏览器中处理
- 数据不离开你的设备
- 免费 · 无需注册
用微信扫描以下二维码即可分享
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。
错误输出说明
验证失败时,错误框包含以下信息:
- 原因 — 错误的通俗描述(如 缩进错误、流结束异常)。
- 行号与列号 — 错误在输入中的精确位置。
- 代码片段 — 解析器提供的上下文,通常包含指向问题字符的
^标记。
常见 YAML 语法错误
- 缩进不一致 — YAML 要求统一使用空格(禁止 Tab)缩进,同级混用 2 格和 4 格缩进会导致解析错误。
- 键后缺少冒号 —
key value是非法的,正确写法为key: value。 - 特殊字符未加引号 — 值中含有
:、#、[、]、{、}等字符时,需要用引号包裹或转义。 - Tab 字符 — YAML 禁止用 Tab 缩进,应将所有 Tab 替换为空格。
- 重复键 — 同一映射块中出现重复键在 YAML 1.2 规范中是非法的。
示例:合法 YAML
server:
host: localhost
port: 8080
tls: true
database:
driver: postgres
name: myapp
credentials:
user: admin
password: "s3cr3t"
allowed_origins:
- https://example.com
- https://api.example.com
示例:非法 YAML(缩进错误)
server:
host: localhost
port: 8080 # 错误:多余的空格导致缩进不一致
验证器会报告检测到缩进不一致的行号和列号,便于快速定位并修复问题。
语法合法不等于结构正确
验证器报告的是语法错误。能解析的 YAML 结构也可能不对,所以要看「解析结构」预览。下面的文件里,carrot 少缩进了两个空格:
fruits:
- apple
vegetables:
- carrot
- spinach
验证器判定合法,预览显示 "vegetables": ["carrot - spinach"]:下一行被并进了 carrot,成为一个字符串。
YAML 1.1 与 1.2 对值的解读不同
本工具用 js-yaml 4.3.2,遵循 YAML 1.2;Python 常用的 PyYAML 遵循 YAML 1.1。同一份文件得到的数据不同:
| YAML | 本工具(js-yaml 4.3.2) | PyYAML 6.0.3 safe_load |
|---|---|---|
debug: yes | "yes"(字符串) | True |
country: NO | "NO"(字符串) | False |
octal: 0777 | 777 | 511 |
time: 12:30 | "12:30"(字符串) | 750 |
文件会被 YAML 1.1 解析器读取时,给 "NO"、"yes"、"0777" 这类值加引号。
常见报错
| 输入 | 验证器的报错 |
|---|---|
message: Error: something went wrong | bad indentation of a mapping entry(1:15);给值加引号 |
host: 前面用了 Tab | tab characters must not be used in indentation |
同一映射里出现两次 timeout | duplicated mapping key |
server 后面漏了冒号,下一行有缩进 | end of the stream or a document separator is expected |
限制
-
多个文档逐个检查。 用
---分隔多个文档的文件(如同时包含 Deployment 和 Service 的 Kubernetes 清单)用 js-yaml 的loadAll读取。全部有效时,预览是 JSON 数组,每个文档一项;有文档出错时,逐个列出每个文档的行范围,标明有效或给出错误,出错的 Service 不会掩盖有效的 Deployment。 -
只检查语法。 不按 Kubernetes、GitHub Actions、Docker Compose 的 schema 校验,也不做风格检查。CI 里用 yamllint(
yamllint .)。 -
预览是 JSON。 锚点和
<<合并键在预览里已展开,注释不显示。JSON 无法原样显示的值会在预览上方按 JSON Pointer 路径列出,YAML 仍判为有效。下面的 YAML:size: .inf id: 9007199254740993 due: 2026-02-31显示
JSON 预览没有按原样显示下列值:/size:inf 在 JSON 中没有写法(JSON.stringify 会写成 null);/id:整数 9007199254740993 超出 ±(2^53 − 1),JavaScript 会把它四舍五入;/due:2026-02-31 不是有效的日期或时间。预览里这些位置是null、9007199254740992和"2026-03-03T00:00:00.000Z",不要把它当作原数据复制。预览把负零写成-0.0,时间戳显示为 UTC(2026-10-01T09:30:00+09:00显示为"2026-10-01T00:30:00.000Z")。 -
js-yaml 的处理上限。 js-yaml 4.3.2 遇到嵌套超过 100 层、合并键(
<<)累计处理的映射和键超过 10,000 个、一个合并键列出超过 100 个映射的文档会停止。错误信息写明上限,例如「集合嵌套超过 100 层(js-yaml 默认上限)」,并给出行列。
FAQ
YAML 验证器能检查哪些问题?
工具使用 js-yaml 解析器(符合 YAML 1.2 规范)检查语法错误。缩进错误、非预期字符、重复键、缺少冒号等问题均可捕获,并精确报告错误所在的行号和列号。
和 YAML 转 JSON 工具有什么区别?
转换器假定输入合法并进行格式转换;而验证器专注于判断 YAML 语法是否正确,提供详细错误信息帮助修复问题。本工具面向「检查并修复 YAML 语法错误」的使用场景,而非格式转换。
「解析结构预览」是什么?
当 YAML 语法合法时,工具会将其解析为数据对象,并以格式化 JSON 形式展示,方便直观确认数据结构是否符合预期,也可复制 JSON 结果供其他地方使用。.inf、超出 ±(2^53 − 1) 的整数、2026-02-31 这类不存在的日期等 JSON 无法原样显示的值,会在预览上方按路径列出。
支持哪个 YAML 规范版本?
工具使用 js-yaml 4.x,实现 YAML 1.2 规范,支持锚点、别名、多行字符串、块/流序列及显式类型标签等常用 YAML 语法。用 --- 分隔多个文档的文件用 loadAll 读取,每个文档分别给出结果。
数据会上传到服务器吗?
不会。验证在浏览器中通过 JavaScript 完成,YAML 内容不会离开本地设备。