YML 格式化
格式化、驗證和美化 YAML 資料
關於 YML 格式化
YAML Formatter 以 YAML 1.2 安全解析器驗證輸入,再以統一縮排重新序列化,捕捉重複的 key、用了 tab 而非空格、以及型別模糊等問題——這些都會讓 Kubernetes、GitHub Actions 等工具鏈靜默失敗。YAML 規格在語法上很寬鬆,卻在幾個地方有出人意料的嚴格限制,這個工具讓那些邊界情況在推上 CI 或部署到叢集之前就浮出水面。
常見使用情境
常見問題
為什麼 YAML 不能用 tab?
YAML 1.2 明確禁止用 tab 字元縮排。原因是 tab 的寬度不明確——不同編輯器和終端機顯示方式不同,讓以縮排為結構依據的解析無法可靠進行。縮排位置有 tab 就是硬性語法錯誤。請把編輯器設定成在 YAML 檔按下 Tab 時插入空格。
什麼是 YAML 1.1 的「挪威問題」?
在 YAML 1.1 裡,yes、no、on、off、true、false 全部被解析為布林值。挪威的 ISO 國碼 NO 如果不加引號就會變成 false。YAML 1.2 把布林值縮限為只有 true 和 false,但許多 parser(包括 PyYAML 的預設 loader)仍然實作 1.1 規則。no、yes、國碼這類模糊的值都應該加引號。
YAML 的 anchor 和 alias 是什麼?
anchor(&name)標記一個節點供後續引用,alias(*name)貼上該節點的參照。常用於 docker-compose 和 CI 設定,避免重複貼相同的 environment block。merge key(<<: *anchor)可以把一個 map 疊加到另一個上面。格式化工具會保留 anchor 和 alias,不會把它們展開攤平。
什麼時候要給字串加引號?
當值長得像其他型別時就要加引號:"3.14" 保持字串,3.14 變成浮點數;"true" 保持字串,true 變成布林值;"null" 保持字串,null 變成 nil。含有 :、#、{、}、[、] 或頭尾有空格的字串也要加引號,避免 parser 誤以為是語法結構。
YAML 和 JSON 各適合什麼場景?
YAML 適合人工維護的設定檔——不需要大括號、支援註解、多行字串自然。JSON 適合機器對機器的資料交換——型別明確、無意外轉換、各語言普遍支援。人寫設定用 YAML,API payload 用 JSON。