YAML 格式化工具

將 YAML 整理為統一的縮排寬度,或轉換為 JSON。可檢測製表符混入和縮排不一致等問題。

什麼是 YAML 格式化工具

YAML 格式化工具可以將縮排寬度不統一的 YAML 重新整理為 2 個或 4 個空格的統一縮排,並在整理的同時檢查語法是否正確。組態檔在反覆複製貼上和手動編輯之後很容易出現縮排錯亂,而很多時候直到 CI/CD 流程或組態管理工具報錯才會發現問題。本工具完全在瀏覽器內執行,因此可以在不將敏感組態內容傳送到外部伺服器的情況下完成檢查。

本工具基於自研的輕量級解析器,面向 Docker Compose、GitHub Actions、Kubernetes 清單等場景中常用的「常見子集」——對映、列表、內聯流式集合以及基本標量型別。它不支援錨點(&)、別名(*)、多文件、塊狀標量(|>)等高階功能,如果需要處理用到這些特性的 YAML,請搭配完整功能的解析器一起使用。

YAML 格式化工具的使用方法

  1. 貼上 YAML 將需要整理的 YAML 貼到左側的輸入框。如果手邊沒有可用的內容,點擊「示例」按鈕即可插入一段用於測試的 YAML。
  2. 選擇模式 選擇「格式化・驗證」來檢查語法並統一縮排,或選擇「轉換為 JSON」將 YAML 內容渲染成 JSON。
  3. 選擇縮排寬度 僅在「格式化・驗證」模式下可選,從 2 個空格或 4 個空格中選擇輸出縮排,與專案現有規範保持一致即可。
  4. 查看輸出結果 如果 YAML 有效,右側會顯示整理後的結果(或轉換後的 JSON);如果無效,則會顯示錯誤訊息和行號,方便直接定位到出問題的那一行。
  5. 複製結果 點擊「複製」按鈕,將輸出結果複製到剪貼簿,隨後可直接貼回組態檔中。

用好本工具的小技巧

  • 本工具採用自研的輕量級解析器,支援 key: value 鍵值對、巢狀、列表,以及內聯的 [a, b, c]{a: 1} 寫法。
  • 即使貼上縮排不統一(例如 3 個或 5 個空格)的 YAML,只要能成功解析,就可以重新輸出為統一的 2 或 4 個空格縮排。
  • 在“轉換為 JSON”模式下,可以直接預覽將 YAML 內容轉換成 JSON 的結果,方便與 CI 配置或 API 響應進行比較。
  • 出現錯誤時會顯示行號,請檢查該行的縮排或冒號後面是否忘記加空格。
  • YAML 規範禁止使用製表符縮排。建議在編輯器設定中開啟“將製表符轉換為空格”,以避免這類問題。

適用場景

提交前檢查 CI 組態檔

在提交 GitHub Actions 或 GitLab CI 的 .yml 檔案之前,用本工具檢查一遍是否存在縮排錯亂或誤混入的製表符,可以避免流程因語法錯誤而中斷。

整理 Kubernetes 清單檔案

由多人共同編輯的 Deployment、Service 清單檔案很容易出現縮排寬度不統一的情況,可以先統一為團隊約定的規範(例如 2 個空格)後再提交審閱。

驗證 Docker Compose 檔案

docker-compose.yml 中的縮排錯誤往往要到容器啟動失敗時才會被發現,提前用本工具檢查語法和縮排的一致性會更加安心。

對照 YAML 與 JSON

當同一份組態或 API 資料需要同時以 YAML 和 JSON 兩種格式使用時,可以用「轉換為 JSON」模式查看轉換結果,再配合基於 JSON 的其他工具或結構描述驗證一起使用。

術語表

YAML
「YAML Ain't Markup Language」的遞迴縮寫,是一種透過縮排表達層級結構的資料序列化格式,被廣泛用作組態檔。
縮排
位於行首的空白字元,在 YAML 中用於表示父子層級關係。根據規範,縮排不能使用製表符。
對映(Mapping)
以「鍵: 值」形式表示資料的結構,相當於其他語言中的關聯陣列或物件。
列表(Sequence)
按順序排列多個值的結構,每個項目以「- 」(連字符加空格)開頭表示。
流式風格(Flow Style)
將對映或列表以 {a: 1}[a, b, c] 這樣的形式寫在同一行的內聯寫法,不依賴縮排即可簡潔表達。
錨點與別名
&name 定義內容後,透過 *name 在其他位置重複使用,可避免重複書寫相同的值。本工具不支援該功能。
塊狀標量(Block Scalar)
使用 |(保留換行)或 >(將換行摺疊為空格)來書寫多行字串的方式。本工具不支援該功能。
挪威問題
不加引號的 noyes 等值會被解釋為布林值而非字串,是 YAML 中廣為人知的一個陷阱。

常見問題

對於需要人工編輯和審閱的配置檔案(如 CI 配置、Kubernetes 清單等),YAML 支援註釋、可讀性更高,更為合適;而對於程式之間互動的場景(如 API 響應),歧義更少、解析速度更快的 JSON 更為合適。

YAML 規範禁止使用製表符進行縮排。大多數解析器會將其視為語法錯誤並中止處理。建議將編輯器設定為自動把製表符轉換為空格,以確保安全。

不支援。本工具面向 Docker Compose、GitHub Actions 等場景中常見的“常用子集”(對映、列表、內聯流式集合以及基本標量型別),不支援錨點、別名、多文件、塊狀標量(|>)等高階功能。

這是一個著名的陷阱:如果不加引號直接寫 noyesonoff,許多 YAML 實現會將其解釋為布林值,而不是普通字串(例如挪威的國家程式碼)。如果希望將其作為字串處理,需要用引號括起來,例如 "no"
工具君

閒話 ― YAML 為何成為配置檔案的主流選擇

YAML(YAML Ain't Markup Language)是一種誕生於 2001 年的資料序列化格式。由於不需要閉合標籤、外觀比 XML 更簡潔,自 2010 年代以來被廣泛用作基礎設施配置檔案的格式,例如 Docker Compose、GitHub Actions 和 Kubernetes 清單檔案都採用了 YAML。

不過,YAML“用縮排表達結構”的設計雖然對人類來說易讀,卻也存在一個弱點:複製貼上時縮排很容易被打亂。尤其是當製表符和空格混用時,許多解析器不會報錯,而是悄悄地將其解釋為錯誤的結構,這很容易成為配置失誤的溫床。

此外還有一個著名的陷阱,被稱為“挪威問題”。如果不加引號直接寫國家程式碼 no,許多 YAML 實現會將其解釋為布林值 false。YAML 1.1 與 1.2 版本對哪些字串會被視為布林值的規定也有所不同,這也是不同實現之間相容性問題的常見成因。