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 這樣的值可以不加引號照原樣寫下。

使用方法

  1. 貼入 TOML Cargo.toml 或 pyproject.toml 的內容可原樣貼入。
  2. 查看判定 語法完好會標為有效的 TOML;若不通過,則指出出問題的那一行。
  3. 閱讀整理後的結果 = 兩側與陣列分隔處的空格會被統一,表與表之間的界限也變得一目了然。
  4. 複製回去 整理後的內容可原封不動地寫回檔案。

用好本工具的小技巧

  • 跨越多行的陣列、內聯表和多行字串("""..."""・'''...''')會依原文輸出,以免改變內容。格式化的對象是寫在一行內的值。
  • 語法判定使用符合 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 這樣的日期或時間可以不加引號寫出。

常見問題

如果內容以簡單的鍵值對為主,且由多人共同編輯(如依賴關係定義),TOML 更合適,因為縮排失誤很少會破壞結構。如果需要深層巢狀或在一個檔案中組合多份文件,YAML 的表現力更強。

本工具會正確格式化每一個 [[section]] 表頭,但不會像完整的 TOML→JSON 轉換器那樣,把同名的多個表格合併成一個數組物件。對於複雜的表格陣列結構,建議直接檢視逐行格式化後的結果來確認。

按 RFC 3339 格式判定,並原樣輸出該值。像 2 月 30 日、25 點這樣在日曆上不存在的日期和時間會報錯。不過,跨越多行的陣列中的日期不在此日曆檢查範圍內。

依照 TOML 規範視為有效的值。為免改變含義,字串內容(包括空行和行尾空格)不做格式化,原樣輸出。

不會。所有格式化處理都在您的瀏覽器內通過 JavaScript 完成,不會發送到伺服器或被儲存,因此即使配置檔案中包含憑據資訊也可以放心使用。
工具君

閒話 ― 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 之間做出取捨。