YAML 設定 (.yaml)

YAML 標準

YAML Ain't Markup Language (YAML) 是現代 DevOps、雲端基礎架構(Kubernetes、Docker Compose)與 CI/CD 自動化中的主要資料序列化格式,透過清晰的空白縮排來強調人類可讀性。

將 YAML 轉換為 JSON

免費的瀏覽器端 YAML 轉 JSON 轉換器。在您的裝置上即時轉換檔案。

檢查與中繼資料

作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 YAML 檔案:

在這裡選擇或拖放檔案

私密 - 檔案絕不會離開您的裝置

或貼上 Ctrl+V
零網路傳輸隱私保證: 0 位元組上傳至外部伺服器。所有處理皆在本機瀏覽器沙箱中進行。

位元組層級標頭簽章(檔案簽章)

作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 YAML 檔案:

十六進位簽章(偏移量 0):

2D 2D 2D 0A

ASCII 表示法: ---\n

標準化: YAML 1.2.2 規格

技術規格

容器架構基於縮排、對人類友善的資料序列化格式,為支援錨點與別名的 JSON 超集合
壓縮未壓縮的文字串流
位元組序UTF-8 / Unicode 文字串流
色彩空間不適用(資料序列化)
色版與結構映射(鍵值字典)、序列(清單)、純量型別(字串、數字、布林值)與錨點(&ref/*ref)
最大尺寸文件大小不受限制(支援以「---」分隔的多份文件串流)
透明度無
串流與漸進式多文件串流允許依序逐份處理各個文件

技術比較矩陣:YAML 對比競爭格式

技術屬性YAML (目前)JSONTOMLXML
語法風格縮排空白階層嚴格的方括號與引號表格與鍵值對冗長的開頭/結尾標籤
註解支援原生(# 註解)不允許註解原生(# 註解)<!-- 註解 -->
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,同時確保隱私。