YAML 設定 (.yaml)
YAML 標準YAML Ain't Markup Language (YAML) 是現代 DevOps、雲端基礎架構(Kubernetes、Docker Compose)與 CI/CD 自動化中的主要資料序列化格式,透過清晰的空白縮排來強調人類可讀性。
將 YAML 轉換為 JSON
免費的瀏覽器端 YAML 轉 JSON 轉換器。在您的裝置上即時轉換檔案。
檢查與中繼資料
作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 YAML 檔案:
位元組層級標頭簽章(檔案簽章)
作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 YAML 檔案:
十六進位簽章(偏移量 0):
2D 2D 2D 0AASCII 表示法: ---\n
標準化: YAML 1.2.2 規格
技術規格
| 容器架構 | 基於縮排、對人類友善的資料序列化格式,為支援錨點與別名的 JSON 超集合 |
| 壓縮 | 未壓縮的文字串流 |
| 位元組序 | UTF-8 / Unicode 文字串流 |
| 色彩空間 | 不適用(資料序列化) |
| 色版與結構 | 映射(鍵值字典)、序列(清單)、純量型別(字串、數字、布林值)與錨點(&ref/*ref) |
| 最大尺寸 | 文件大小不受限制(支援以「---」分隔的多份文件串流) |
| 透明度 | 無 |
| 串流與漸進式 | 多文件串流允許依序逐份處理各個文件 |
技術比較矩陣:YAML 對比競爭格式
| 技術屬性 | YAML (目前) | JSON | TOML | XML |
|---|---|---|---|---|
| 語法風格 | 縮排空白階層 | 嚴格的方括號與引號 | 表格與鍵值對 | 冗長的開頭/結尾標籤 |
| 註解支援 | 原生(# 註解) | 不允許註解 | 原生(# 註解) | <!-- 註解 --> |
| DevOps 採用度 | 支援情況因軟體而異。 | 支援情況因軟體而異。 | Rust / Python 套件設定 | 企業舊有設定 |
| 資料重複使用 | 原生錨點(&)與別名(*) | 無(手動複製) | 無(手動複製) | XML 實體 |
常見損壞模式與十六進位修復指南
剖析器錯誤:「mapping values are not allowed here」或縮排錯誤。
根本原因: 混用 Tab 與空白鍵,或縮排層級未對齊。
修復: 將 Tab 轉換為空白鍵,並使用 File2File.app YAML 格式化工具驗證語法。
安全性分析與解析器攻擊向量
支援自訂型別標籤(例如 PyYAML 的「yaml.load()」)的 YAML 剖析器,過往曾允許透過任意物件實體化來執行遠端程式碼。
已知攻擊向量
- 透過不安全的物件反序列化標籤(例如「!!python/object/apply」)執行任意程式碼。
- 實體擴充炸彈(相當於使用 YAML 錨點與別名的億萬笑聲攻擊)。
- 由於隱含的布林值與時間戳記剖析所導致的型別混淆弱點。
防禦最佳實務: 請務必使用安全的 YAML 剖析器(Python 中的「yaml.safe_load()」)並強制執行錨點擴充深度限制。
歷史起源與里程碑
2021發布 YAML 1.2.2 修訂版,精進 JSON 相容性與正式語法定義。
2009YAML 1.2 將 YAML 標準化為 JSON 的嚴格超集合,這代表所有有效的 JSON 都是有效的 YAML。
2001Clark Evans、Ingy döt Net 與 Oren Ben-Kiki 建立 YAML,作為比 XML 更易於人類閱讀的替代方案。
主要優勢與優點
- YAML 常見於基礎架構工具中,但支援與行為會因實作而異。
- 乾淨且易讀的語法:透過直覺的縮排消除了大括號、方括號和引號的雜亂。
- 支援參照與錨點(&anchor / *anchor),可重複使用設定區塊,無須複製內容。
技術限制與缺點
- 對空白字元敏感:一個意外的 Tab 字元或單一多餘的空白可能會破壞文件階層或導致解析錯誤。
- 惡名昭彰的型別強制轉換錯誤:未加引號的單字(如「no」、「on」、「yes」)或國碼(挪威的「NO」)可能會悄悄變成布林值。
- 與二進位格式或嚴格的 JSON 相比,解析速度明顯較慢。
有趣的技術冷知識
- YAML 最初代表「Yet Another Markup Language」,但後來被幽默地重新命名為遞迴縮寫「YAML Ain't Markup Language」,以強調資料序列化。
- 「挪威問題」是一個著名的程式設計錯誤,其中 YAML 檔案中的國碼「NO」被解析為布林值「false」。
- 世界上每個有效的 JSON 檔案同時也是 100% 有效的 YAML 檔案。
常見技術問題
YAML 用來做什麼?
YAML 是用於雲端運算、Kubernetes 叢集部署、Docker Compose 檔案、GitHub Actions 工作流程以及軟體設定的主要設定語言。
我可以在 YAML 檔案中使用 Tab 嗎?
不行。官方 YAML 規格嚴格禁止使用 Tab 字元縮排;您必須一律使用空格(通常每層 2 個空格)。
如何將 YAML 轉換為 JSON?
您可以直接在網頁瀏覽器中使用 File2File.app,一鍵將 YAML 檔案轉換為整潔且經過驗證的 JSON,同時確保隱私。