TOML 格式化工具
格式化並校驗 TOML(Tom's Obvious, Minimal Language)。依照 TOML v1.1.0 規範判定語法,統一 = 兩側與陣列分隔處的空格,並以行號提示語法錯誤。
TOML 的主要資料型別
| 型別 | 示例寫法 | 說明 |
|---|---|---|
| 字串(基本) | "hello" | 用雙引號括起來,支援 \n、\t 等轉義序列。 |
| 字串(字面量) | 'C:\path' | 用單引號括起來,完全不進行轉義處理,適合包含反斜槓的路徑字串。 |
| 整數 | 42 | 預設十進位制,也支援 0x(十六進位制)・0o(八進位制)・0b(二進位制),以及 1_000 這樣的下劃線分隔。 |
| 浮點數 | 3.14 | 指數記法(1e10)以及 inf・nan 也是有效值。 |
| 布林值 | true | true 或 false 二選一,首字母大寫(True)無效。 |
| 陣列 | [1, 2, 3] | 在方括號內用逗號分隔多個值,允許末尾逗號。 |
| 表格 | [server] | 表頭之後出現的所有 key = value 都屬於該表格的子項。 |
| 表格陣列 | [[fruits-basket]] | 通過重複同名表格來表示陣列(例如多個依賴包的定義)。 |
| 日期/時間 | 1979-05-27T07:32:00Z | RFC 3339 格式,是唯一可以不加引號書寫的複合型別值。 |
TOML 的格式化與語法檢查
TOML 是為設定檔而設計的格式,其長處正在於只需羅列 key = value 的那份樸素。本工具會把您貼入的 TOML 整理排版,並同時判定語法是否說得通;一旦有破損,便指出出問題的行。
在 TOML 上最容易絆倒人的一點是:結構來自寫作 [表名] 的標題行,而非縮排。 慣用 YAML 的人往往伸手去用縮排表達層級,可在 TOML 裡縮排毫無意義——寫在一個表標題與下一個標題之間的鍵,便歸屬於那個表。 換言之,一行所處的位置正是結構的決定者。另一個特點是把日期與時間當作一等型別,像 2026-09-20T10:00:00Z 這樣的值可以不加引號照原樣寫下。
使用方法
-
貼入 TOML
Cargo.toml或pyproject.toml的內容可原樣貼入。 - 查看判定 語法完好會標為有效的 TOML;若不通過,則指出出問題的那一行。
- 閱讀整理後的結果 = 兩側與陣列分隔處的空格會被統一,表與表之間的界限也變得一目了然。
- 複製回去 整理後的內容可原封不動地寫回檔案。
用好本工具的小技巧
- 跨越多行的陣列、內聯表和多行字串("""..."""・'''...''')會依原文輸出,以免改變內容。格式化的對象是寫在一行內的值。
- 語法判定使用符合 TOML v1.1.0 的解析器 smol-toml。帶前導零的整數(007)、帶符號的十六進位數(+0x10)、含空格的裸鍵以及重複定義的鍵也會被判定為無效。
- 格式化結果會將「=」兩側統一為一個半形空格,並將陣列/內聯表的分隔符統一為「, 」,從而消除不同書寫者之間的格式差異。
- 註釋(# 之後的內容)會被保留,唯一的改動是在「#」之後缺少空格時補上一個空格,改動幅度很小。
- 連續的空行會被合併為一行輸出,讓各個表格之間的分界更容易辨認。
- 本工具的所有處理都在瀏覽器內完成,您貼上的配置內容不會被發送到任何伺服器。
這些情境會用到
查找設定檔裡的差錯
把表標題放錯位置,會悄然改變某個鍵的歸屬,而這正是肉眼極少能逮住的一類錯誤。
閱讀 Rust 與 Python 的專案設定
整理 Cargo.toml 或 pyproject.toml 後,相依之間的分界便容易順下來。
核對由別的格式改寫來的內容
由 JSON 或 YAML 改寫的設定,可當場檢驗語法是否說得通。
統一團隊的寫法
提交前整理一遍,可把無關的空白差異擋在差異之外,只留下真正的改動。
TOML 的術語
- 表
- 寫在方括號裡的標題,如
[package],它把從此處到下一個標題之間的鍵聚成一組。 - 表陣列
- 以雙重方括號寫作
[[dependencies]]的記法。重複同一標題,陣列便多出一個元素。 - 內嵌表
- 寫成一行的表,如
{ a = 1, b = 2 }。適合簡短的設定。 TOML v1.0.0 不允許在其中換行,而 2025 年 12 月發布的 v1.1.0 起允許換行和結尾逗號。 - 基本字串
- 用雙引號括起的字串,其中
\n之類的跳脫是生效的。 - 字面字串
- 用單引號括起的字串。其中任何跳脫都不生效,因而最適合寫 Windows 路徑與正規表示式。
- 日期時間
- TOML 原生提供的型別。像
1979-05-27T07:32:00Z這樣的日期或時間可以不加引號寫出。
常見問題
[[section]] 表頭,但不會像完整的 TOML→JSON 轉換器那樣,把同名的多個表格合併成一個數組物件。對於複雜的表格陣列結構,建議直接檢視逐行格式化後的結果來確認。
閒話 ― TOML 為何成為配置檔案的「通用語言」
TOML 由 GitHub 聯合創始人 Tom Preston-Werner 於 2013 年提出,其全稱「Tom's Obvious, Minimal Language」直接體現了設計理念:既要像 JSON 一樣便於機器解析,也要讓人類可以毫無歧義地直接閱讀和書寫。
真正讓 TOML 普及開來的關鍵,是 Rust 的包管理器 Cargo 採用 Cargo.toml 作為其配置檔案格式。此後,Python 的 PEP 518 又引入了 pyproject.toml 作為打包標準,將此前 setup.py、setup.cfg、requirements.txt 各自為政的局面統一了起來。
TOML 與 YAML 最大的區別在於「不賦予縮排任何意義」。YAML 中細微的縮排偏差很容易導致語法錯誤或資料結構被誤解析,而 TOML 僅通過 [section] 與 key = value 的組合來表達層級,因此複製貼上導致的失誤相對更少。
不過 TOML 的表現力也因此略遜於 YAML:它沒有用於複用數值的錨點/別名機制,書寫深層巢狀結構也偏繁瑣,實際工作中往往需要根據資料結構在 TOML、YAML、JSON 之間做出取捨。