TOML 設定 (.toml)
TOML 標準Tom's Obvious Minimal Language (TOML) 是一種明確、以人為本的設定格式,由 GitHub 共同創辦人 Tom Preston-Werner 所建立,並在 Rust (Cargo) 和 Python (pyproject.toml) 等現代程式開發生態系統中被廣泛採用。
將 TOML 轉換為 JSON
免費的瀏覽器端 TOML 轉 JSON 轉換器。在您的裝置上即時轉換檔案。
檢查與中繼資料
作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 TOML 檔案:
位元組層級標頭簽章(檔案簽章)
作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 TOML 檔案:
十六進位簽章(偏移量 0):
5B ... 5DASCII 表示法: [...]
標準化: TOML v1.0.0 規格
技術規格
| 容器架構 | 人類可讀的設定檔,明確對應至雜湊表,並以 [tables] 和 key = value 對來結構化 |
| 壓縮 | 未壓縮的文字串流 |
| 位元組序 | UTF-8 文字串流 |
| 色彩空間 | 不適用(設定檔) |
| 色版與結構 | 表格、表格陣列、內嵌表格、字串、整數、浮點數、布林值以及 RFC 3339 日期時間 |
| 最大尺寸 | 無限制的文字長度 |
| 透明度 | 無 |
| 串流與漸進式 | 循序逐行設定解析 |
技術比較矩陣:TOML 對比競爭格式
| 技術屬性 | TOML (目前) | YAML | JSON | INI |
|---|---|---|---|---|
| 歧義風險 | 零(嚴格明確的規格) | 高(YAML 的「挪威問題」布林值錯誤) | 零(嚴格的資料型別) | 中等(無正式標準) |
| 原生日期時間型別 | 原生 RFC 3339 日期與時間支援 | 隱含字串/日期剖析 | 無(僅限字串) | 無(僅限字串) |
| 註解支援 | 原生(# 註解) | 原生(# 註解) | 不允許註解 | 原生(; 與 # 註解) |
| 主要生態系統 | Rust (Cargo)、Python (PEP 518)、Go | Kubernetes、Ansible、CI/CD 管線 | 網路 API、瀏覽器通訊 | 舊版 Windows、Git 設定 |
常見損壞模式與十六進位修復指南
剖析器錯誤:「Duplicate key in table」或「Invalid table header」。
根本原因: 嘗試在文件中重新定義現有的鍵或表格命名空間。
修復: 使用 File2File.app TOML 格式化工具驗證並重新格式化 TOML 語法。
安全性分析與解析器攻擊向量
TOML 剖析器必須防範原型汙染以及病態表格陣列巢狀所造成的 CPU 耗盡。
已知攻擊向量
- JavaScript TOML 剖析器中的原型汙染,會將屬性注入至 Object.prototype。
- 透過深度巢狀的表格陣列宣告來發動阻斷服務攻擊。
- 在解析大量內嵌陣列時發生無限制的記憶體配置。
防禦最佳實務: 驗證表格巢狀限制,並使用防範原型汙染的安全字典物件。
歷史起源與里程碑
2021TOML v1.0.0 正式發布,凍結了核心語法規格。
2018Python 將「pyproject.toml」(PEP 518)標準化為現代建置設定標準。
2013Tom Preston-Werner 發布 TOML,以提供沒有 YAML 複雜度的乾淨設定格式。
主要優勢與優點
- 完全明確:乾淨且可預測地對應至雜湊表,且沒有任何令人意外的型別強制轉換。
- 原生支援日期時間(RFC 3339 時間戳記、日期、時間),無需字串跳脫。
- 被採納為現代語言工具的官方標準設定格式(Rust Cargo.toml、Python pyproject.toml)。
技術限制與缺點
- 與 YAML 相比,深度巢狀的多層級物件樹可能會顯得冗長。
- 表格陣列([[table.array]])的語法對初學者來說可能不太直觀。
- 對於高吞吐量的機器對機器 API 資料交換,其緊湊性不如 JSON。
有趣的技術冷知識
- TOML 由 Tom Preston-Werner 建立;他同時也是 GitHub 的共同創辦人,並建立了 Gravatar 與 SemVer(語意化版本)。
- Cargo 套件使用 Cargo.toml 來宣告中繼資料、相依性與目標;使用其他建置系統的 Rust 專案可能會使用不同的檔案。
- 與 JSON 不同,TOML 原生支援註解(使用「#」字元)與多行字串。
常見技術問題
TOML 的用途是什麼?
TOML 用於軟體設定,最顯著的例子包括 Rust 的 Cargo.toml、Python 的 pyproject.toml、Go Hugo 設定,以及容器工具。
為什麼在設定檔中,大家會偏好使用 TOML 而非 YAML?
TOML 避免了 YAML 惡名昭彰的邊緣案例解析錯誤(例如未加引號的「NO」變成布林值 false),同時透過註解與清晰的表格保持了對人類友善的特點。
如何將 TOML 轉換為 JSON 或 YAML?
您可以直接在網頁瀏覽器中使用 File2File.app,立即將 TOML 檔案轉換為 JSON 或 YAML。