將 TOML 轉換為 YAML 的最快方法是使用 yq -oy '.' file.toml。手動轉換時,將 TOML 的 [table] 標頭對應為 YAML 的縮排區塊,將 TOML 陣列對應為以短橫線開頭的清單,並且始終為有歧義的字串加上引號,以避免“挪威問題”。
快速轉換:使用 yq CLI
TOML(Tom’s Obvious, Minimal Language)在 2025 年 12 月發佈了v1.1.0 版本,但 YAML 仍然是 CI/CD 管線和 Kubernetes 清單的標準格式。yq 工具可以透過單一指令完成轉換。
安裝 yq
| 平台 | 指令 |
|---|---|
| macOS/Linux | brew install yq |
| Windows | choco install yq |
| Python(pip) | pip install yq |
推薦使用 Mike Farah 開發的 Go 語言版本以獲得更快的速度。正如Mike Farah 的 yq 文件中所述,該工具會解碼 TOML 結構並重新編碼為整潔的 YAML。
執行轉換
在終端機中顯示:
yq -oy '.' your-config.toml
儲存至檔案:
yq -oy '.' your-config.toml > your-config.yaml
-oy 旗標將輸出格式設定為 YAML,可處理鍵值對、巢狀表和陣列。

語法對照表:TOML 結構到 YAML
開發者 Drew DeVault 曾指出,雖然 TOML 很流行,但 YAML 在處理深層巢狀時更為簡潔。以下是精確的對應關係:
表格對應為縮排鍵
TOML 使用方括號標頭;YAML 使用縮排。
| TOML | YAML |
|---|---|
[server] |
server: |
host = "127.0.0.1" |
host: 127.0.0.1 |
port = 8080 |
port: 8080 |
關鍵差異:在 TOML 中,縮排僅用於美觀。而在 YAML 中,縮排是結構性的——哪怕一個空格錯誤都會導致整個設定檔失效。
陣列對應為短橫線清單
TOML: ports = [ 8000, 8001 ]
YAML:
ports:
- 8000
- 8001

正如 Knightli.com 所解釋的,YAML 的“區塊樣式”使清單更易讀,前提是垂直對齊保持一致。
內聯表格和點分隔鍵
| TOML 建構 | YAML 等價形式 |
|---|---|
[a.b.c](點分隔標頭) |
a: → b: → c:(巢狀縮排) |
point = { x = 1, y = 2 }(內聯表格) |
point: → x: 1 → y: 2 |
實際應用場景
Hugo 靜態網站設定
Hugo 支援 hugo.toml、hugo.yaml 或 hugo.json。大多數專案最初使用 TOML(預設格式),當設定需要與 Netlify 或 GitHub Actions 等部署平台保持一致時,再遷移到 YAML。Hammer Europe 指出,hugo 指令會讀取這些檔案來決定如何將 Markdown 轉換為線上網站。
Python 打包:pyproject.toml 到 CI/CD YAML
Python 社群透過 PEP 518 將 pyproject.toml 標準化。這些設定通常需要轉換為 YAML 以用於 GitHub Actions CI/CD 工作流程。對於 AI 智慧代理工作流程,CocoIndex 報告指出,最佳化的 YAML 設定可以將使用量減少高達 70%。
挪威問題及其他轉換陷阱
NO 國家代碼錯誤
在 YAML 1.1 中,像 NO、OFF 和 YES 這樣的裸字串會被自動強制轉換為布林值 false 或 true。TOML 透過要求所有字串加引號來避免此問題。轉換時,務必為 YAML 中有歧義的值加上引號:
| 值 | YAML 1.1 解釋 | 修正方式 |
|---|---|---|
NO |
false |
"NO" |
OFF |
false |
"OFF" |
YES |
true |
"YES" |
On |
true |
"On" |
YAML 1.2(目前規範)修正了大部分強制轉換問題,但許多解析器仍然預設使用 1.1 的行為。

縮排錯誤
YAML 解析器會拒絕縮排不一致的檔案。常見錯誤包括:
- 混用製表符和空格(YAML 禁止使用製表符)
- 在一個區塊中使用 3 個空格,在另一個區塊中使用 2 個空格
- 清單項目未對齊
AI 輔助產生
像 AgentBuilder 這樣的工具允許你用自然語言描述設定並輸出經過驗證的 YAML。這種“描述 → 產生 → 驗證”的循環有助於同時避免縮排錯誤和挪威問題。
總結
使用 yq -oy '.' file.toml 進行自動轉換。手動操作時,將 TOML 表格對應為 YAML 縮排,陣列對應為短橫線清單,並始終為可能被誤認為布林值的字串加上引號。轉換完成後,務必在部署前驗證 YAML 輸出——一個未對齊的空格或一個未加引號的 NO 就可能導致整個管線崩潰。
常見問題
YAML 支援像 TOML 那樣的註解嗎?
支援。兩者都使用 # 作為單行註解。YAML 註解可能會干擾多行字串解析,因此在不確定時,請將註解放在單獨的行上。
什麼是 YAML 中的“挪威問題”?
在 YAML 1.1 中,像 NO(挪威的國家代碼)這樣的裸字串會被自動轉換為布林值 false。TOML 透過要求所有字串值加引號來避免此問題。將 TOML 轉換為 YAML 時,請將任何可能有歧義的字串用引號包裹。
哪種格式更適合處理深層巢狀?
YAML。TOML 需要為每個層級重複像 [table.subtable.subsubtable] 這樣的長標頭,這會變得冗長。YAML 用縮排來表示相同的層級結構——在深層巢狀時更加緊湊和易讀。

發佈留言