TOML 設定 (.toml)

TOML 標準

Tom's Obvious Minimal Language (TOML) 是一種明確、以人為本的設定格式,由 GitHub 共同創辦人 Tom Preston-Werner 所建立,並在 Rust (Cargo) 和 Python (pyproject.toml) 等現代程式開發生態系統中被廣泛採用。

將 TOML 轉換為 JSON

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

檢查與中繼資料

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

在這裡選擇或拖放檔案

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

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

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

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

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

5B ... 5D

ASCII 表示法: [...]

標準化: TOML v1.0.0 規格

技術規格

容器架構人類可讀的設定檔,明確對應至雜湊表,並以 [tables] 和 key = value 對來結構化
壓縮未壓縮的文字串流
位元組序UTF-8 文字串流
色彩空間不適用(設定檔)
色版與結構表格、表格陣列、內嵌表格、字串、整數、浮點數、布林值以及 RFC 3339 日期時間
最大尺寸無限制的文字長度
透明度無
串流與漸進式循序逐行設定解析

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

技術屬性TOML (目前)YAMLJSONINI
歧義風險零(嚴格明確的規格)高(YAML 的「挪威問題」布林值錯誤)零(嚴格的資料型別)中等(無正式標準)
原生日期時間型別原生 RFC 3339 日期與時間支援隱含字串/日期剖析無(僅限字串)無(僅限字串)
註解支援原生(# 註解)原生(# 註解)不允許註解原生(; 與 # 註解)
主要生態系統Rust (Cargo)、Python (PEP 518)、GoKubernetes、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。