YAML 格式化工具
將 YAML 整理為統一的縮排寬度,或轉換為 JSON。可檢測製表符混入和縮排不一致等問題。
什麼是 YAML 格式化工具
YAML 格式化工具可以將縮排寬度不統一的 YAML 重新整理為 2 個或 4 個空格的統一縮排,並在整理的同時檢查語法是否正確。組態檔在反覆複製貼上和手動編輯之後很容易出現縮排錯亂,而很多時候直到 CI/CD 流程或組態管理工具報錯才會發現問題。本工具完全在瀏覽器內執行,因此可以在不將敏感組態內容傳送到外部伺服器的情況下完成檢查。
本工具基於自研的輕量級解析器,面向 Docker Compose、GitHub Actions、Kubernetes 清單等場景中常用的「常見子集」——對映、列表、內聯流式集合以及基本標量型別。它不支援錨點(&)、別名(*)、多文件、塊狀標量(|、>)等高階功能,如果需要處理用到這些特性的 YAML,請搭配完整功能的解析器一起使用。
YAML 格式化工具的使用方法
- 貼上 YAML 將需要整理的 YAML 貼到左側的輸入框。如果手邊沒有可用的內容,點擊「示例」按鈕即可插入一段用於測試的 YAML。
- 選擇模式 選擇「格式化・驗證」來檢查語法並統一縮排,或選擇「轉換為 JSON」將 YAML 內容渲染成 JSON。
- 選擇縮排寬度 僅在「格式化・驗證」模式下可選,從 2 個空格或 4 個空格中選擇輸出縮排,與專案現有規範保持一致即可。
- 查看輸出結果 如果 YAML 有效,右側會顯示整理後的結果(或轉換後的 JSON);如果無效,則會顯示錯誤訊息和行號,方便直接定位到出問題的那一行。
- 複製結果 點擊「複製」按鈕,將輸出結果複製到剪貼簿,隨後可直接貼回組態檔中。
用好本工具的小技巧
- 本工具採用自研的輕量級解析器,支援 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)
- 使用
|(保留換行)或>(將換行摺疊為空格)來書寫多行字串的方式。本工具不支援該功能。 - 挪威問題
- 不加引號的
no、yes等值會被解釋為布林值而非字串,是 YAML 中廣為人知的一個陷阱。
常見問題
|、>)等高階功能。no、yes、on、off,許多 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 版本對哪些字串會被視為布林值的規定也有所不同,這也是不同實現之間相容性問題的常見成因。