跳到正文

YAML 格式化与校验

YAML Formatter & Validator

统一 YAML 缩进并校验语法,把会让解析器崩掉的制表符和锚点错误标出来。

把一份 YAML 文件的缩进统一,并告诉你换一个解析器会读出什么不同的东西。它是一个保留注释、锚点、标签和块标量的 YAML 1.2 读取器,所以输出是你的文档修好了布局——而不是经过一个会把注释扔掉的数据模型走一个来回。

🔒 完全在你的浏览器里运行yamlformatvalidateconfig
输出
缩进

YAML 输入

拖入 .yaml 文件

只在这个标签页里读取,不上传。

格式化后的 YAML

已格式化。

读出来了,但各家解析器未必这么读

  • 19:22 — `no` 在 YAML 1.2 里是字符串 "no"。YAML 1.1 解析器会把它读成布尔值——加上引号,或者写成 true/false,两边才会一致。

文档

1

键

30

列表项

8

锚点 / 别名

1 / 1

警告

1

这个格式化工具做什么,不做什么

  • · 按 YAML 1.2 核心 schema 读取。 yes、no、on、off 都是字符串, 0755是十进制的 755,不是八进制。凡是 1.1 解析器会读成别的值,上面都会给出警告。
  • · 注释、锚点(&)、别名(*)、标签,以及 |、> 块标量都原样保留。值的顺序也不会变。
  • · 用制表符缩进、键重复、别名先用后定义、引号没闭合,都会当作错误抓出来,并给出行和列。
  • · 合并键 << 是 YAML 1.1 的特性,但 docker-compose 和 Ansible 的文件用得实在太多,所以转成 JSON 时会应用它,并同时给出警告。
  • · [a, b] 这类流式集合里的注释没有可挂靠的行,会丢掉。其余注释都保留。

要转成 JSON 或 TOML,请用 JSON ⇄ YAML 互转;要拿 schema 校验文档,请用 JSON Schema 校验。

怎么用

  1. 粘贴清单或配置

    Kubernetes 清单、CI 文件、docker-compose。用 `---` 分隔的多份文档按流读取并分别计数。

  2. 选列表风格

    人们真正争论的那一个设置:`- item` 和它的键平齐,还是缩进在键下面。两种都是合法的 YAML;Kubernetes 清单习惯上用平齐的写法。

  3. 读警告

    含义取决于读取器实现哪个 YAML 版本的值——`yes`、`no`、`0755`——会带行列号列出。在另一个工具上把部署搞坏的正是这些。

  4. 或者把输出切成 JSON

    同一次解析,渲染成 JSON,这是看一个值实际解析成了什么最快的办法——包括合并键展开成了什么。

常见问题

为什么这里 `no` 是字符串?

因为 YAML 1.2 的核心 schema 这么规定:布尔值只有 `true` 和 `false`。YAML 1.1——PyYAML 至今默认的仍是它——把 `no`、`off` 和 `n` 读成 false。凡是两者不一致的值都会标成警告,因为那是行为上的真实差异,不是风格差异。

我的锚点和别名会保留吗?

在 YAML 输出里,会——`&res` 和 `*res` 按你写的输出,数量显示在统计里。JSON 视图必须展开它们,因为 JSON 没有办法表达「再来一次同一个节点」。

支持合并键吗?

`<<:` 是 YAML 1.1 的特性,不属于 1.2——但 docker-compose 和 Ansible 文件一直在用,所以转成 JSON 时会应用它,并附一条警告说明发生了这件事。在 YAML 输出里它按原样保留。

有条注释不见了。为什么?

几乎可以肯定它在一个流式集合里——`[a, # note\n b]`。流式集合会重新打印成一行,那里的注释没有一行可以附着。每一条独占一行或跟在值后面的注释都会保留。

可以从这些接进来

接下来

这些工具吃得下当前工具的产出,结果可以直接送过去。