YAML 语法验证器

在线验证 YAML 语法,精准定位错误行号和列号,验证成功后预览解析结构。免费,在浏览器中处理,数据不离开本地。

  • 在浏览器中处理
  • 数据不离开你的设备
  • 免费 · 无需注册
点击「验证」或按 Ctrl+Enter(Mac 为 ⌘+Enter)。合法 YAML 显示 JSON 预览;错误会显示解析器原因,以及可用的行号、列号和代码片段。有文档出错时,会逐个列出文档结果和可用的行范围。 「清除」清空输入、状态、错误、预览和精度注记。焦点在本工具内时,Ctrl+L(Mac 为 ⌘+L)执行相同操作。
粘贴一个 YAML 文档,或用 --- 分隔的多个文档。验证只检查语法,不检查应用 schema 或代码风格。编辑时不会自动验证,需再次点击「验证」更新结果。

验证 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: 0777777511
time: 12:30"12:30"(字符串)750

文件会被 YAML 1.1 解析器读取时,给 "NO"、"yes"、"0777" 这类值加引号。

常见报错

输入验证器的报错
message: Error: something went wrongbad indentation of a mapping entry(1:15);给值加引号
host: 前面用了 Tabtab characters must not be used in indentation
同一映射里出现两次 timeoutduplicated 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 内容不会离开本地设备。