工具
指南

YAML 校验与格式化

格式化

使用 js-yaml 校验、规范化或压缩 YAML。整理缩进与引号风格,拆分多文档(---)流。纯 YAML 处理,不转换格式。

100% 客户端 无后端

不获取远程 URL;请直接粘贴你的 JSON。

输入
输出
在左侧粘贴 YAML,再选择“格式化”或“压缩”。
本页内容

什么是 YAML 格式化?#

YAML 格式化器处理的是“配置文件飘了”的状态——tab 和空格混着、缩进步长不统一、有些地方加了引号有些没加、某个人定义了锚点却再没用过——把它归一化成干净、可预测的样子。它还顺手抓住 YAML 最臭名昭著的那类问题:一份看起来没毛病、却悄悄意味着别的东西的文档,因为 YAML 对空白敏感、对“光秃秃的词到底算什么”有一堆隐含规则。

本页通过 js-yaml 以受控的方式解析并重新输出你的 YAML。**Format(格式化)**按你选的步长(2 或 4 空格)重新缩进,关闭行折叠让每个值独占一行,并把所有锚点和别名展开成直接重复的内容,使输出完全自包含。Minify(压缩)用同样的解析、但以流式记法重新输出——{a: 1, b: [2, 3]}——这是 YAML 离“紧凑”最近的形式,因为 YAML 没法像 JSON 或 CSS 那样直接删掉自己的空白。无论选哪种模式,文档都会先被解析,所以该有空格的地方出现了 tab、或者冒号后面漏了空格,都会带着行列号报出来,而不是悄悄产出错误的数据结构。

怎么用#

  1. 把 YAML 粘进左侧 Input 框。占位符给了一份最小文档,也可以点 Sample
  2. 在工具栏选一个 Mode 按钮:
    • Format —— 重新缩进、关闭行折叠、展开锚点/别名,用块式输出每个集合。
    • Minify —— 把每个集合都写成流式,尽量压在少数几行。缩进变得无关紧要,因为流式集合是显式的。
  3. 在 Format 模式下,选 Indent(缩进)24 空格。
  4. 可选 Quote(引号风格)auto(只在标量真的需要时才加引号——默认)、single(单引号)、double(双引号)。它归一化的是“必须加引号的标量上用的是哪种引号字符”,绝不会硬给不需要引号的纯值套上引号。
  5. 在右侧 Output 框查看。输出栏会显示大小;Copy 复制;Clear 清空两边。

如果解析失败,状态栏会报出问题的行列——js-yaml 的错误自带位置,本页直接呈现。

主要特性#

  • 格式化与压缩共用同一份解析。 两种模式都先校验文档,所以结构性错误会带位置报一次,跟你按了哪个按钮无关。
  • 锚点被展开。 &anchor / *alias 引用在输出时被解析并内联写死(noRefs),所以输出永远不会依赖三屏之前定义的某个名字——结果是一份自包含、可以交给任何人的文档。
  • 不做行折叠。 长值不会在某列宽处被折行(lineWidth: -1),每个值恰好占一行——更好 diff、更好读。
  • 可选的引号归一化。 选单引号或双引号可以让全文档的引号字符统一;留在 auto,则只有真正需要引号的值才加。
  • 感知多文档。--- 分隔的输入会被当成多份文档解析,再用 --- 分隔输出——对 Kubernetes manifest 这类多文档文件很顺手。
  • 防 YAML 炸弹。 嵌套深度有上限,防止病态深嵌套文档膨胀成危险物。
  • 完全在浏览器端,对超过 1 MB 的输入走 Web Worker,保持页面响应。

实例演示#

一份服务配置,带一个被复用的锚点,风格略不齐:

输入:

service:
  name: &name "api-gateway"
  host:   example.com
  replicas: 3
  id: *name
logging:
  level: info
  outputs: [{name: stdout}, {name: file}]

2 空格、auto 引号,点 Format

service:
  name: api-gateway
  host: example.com
  replicas: 3
  id: api-gateway
logging:
  level: info
  outputs:
    - name: stdout
    - name: file

两件肉眼可见的事。锚点 &name 和别名 *name 都被解析成了字面值 api-gateway,所以 id 现在是一个纯值,文档不再依赖那个锚点。而流式列表 [{name: stdout}, {name: file}] 被改写成了块式列表,一条一行——扫一眼、跟另一版 diff 都容易多了。再对同一份输入点 Minify,同样这份数据以流式回来:

service: {name: api-gateway, host: example.com, replicas: 3, id: api-gateway}
logging: {level: info, outputs: [{name: stdout}, {name: file}]}

每个集合都内联了。因为缩进和换行没了,字节数降了下来,但含义完全一致——对一个空白敏感的格式来说,这正是“压缩”应有的意思。

常见问题#

我的注释去哪了?#

通过 js-yaml 做的 YAML 往返,会把注释解析后丢弃——这个库里没有“保留注释的重新输出器”。解析时注释被宽容对待(绝不会导致报错),但不会出现在输出里。如果注释承载了重要上下文,请把原始文件留作真源,把本工具的输出当成规范的机器形态。

YAML 的 Format 和 Minify 有什么区别?#

Format 把文档重写成干净的块式:嵌套映射和序列按你选的步长缩进、每个值一行、不折行。Minify 把同样的数据重写成流式{key: value}[a, b] 集合挤在一行。两者前置解析完全相同,区别只在于数据怎么被序列化出来。

这和 YAML/JSON 转换器有什么不一样?#

本工具是 YAML 进、YAML 出——归一化或压缩一份 YAML 文档,还你 YAML。本站的 YAML/JSON 转换器是在两种格式之间翻译。想保持原格式、只是排版更好看,用本页;想真的拿到 JSON,用转换器。

我的 YAML 会被上传吗?#

不会。js-yaml 打包进本页,在浏览器里运行。超过 1 MB 的输入会在 Web Worker 里解析,但仍然在本地——什么都不会离开你的设备。