實用工具

TOML 與 JSON 轉換工具

將 TOML 轉成 JSON,也能把 JSON 轉回 TOML——Cargo.toml、pyproject.toml 等都適用——表格與日期完整保留。

瀏覽器本機執行資料格式308
免費

輸入

0 B

結果

結果會顯示在這裡。

Cargo.toml、pyproject.toml、netlify.toml 和許多 Hugo 網站都是用 TOML 寫的,而你遲早會需要把其中某個檔案轉成 JSON——用 jq 查詢、交給指令碼處理,或依結構比較兩個版本。這裡使用 smol-toml 進行雙向轉換,它是一個小巧的 TOML 1.1 解析與序列化函式庫,通過官方 toml-test 測試套件的大部分項目;規格本身維護在 toml-lang/toml。語法錯誤會指出列號與欄號,遇到其中一種格式無法表達的內容時,轉換會停下並指出確切的鍵,而不是悄悄遺失資料。

它是怎麼運作的

  • 行內表格、點號鍵以及 [[bin]] 這類表格陣列,都會變成一般的巢狀 JSON 物件與陣列。
  • 帶時差的日期時間會變成 ISO 8601 字串;本地日期與時間則保留原本的寫法,例如 1979-05-27。
  • JSON 的 null 在 TOML 中沒有對應,所以轉換器會指出這個鍵,而不是像 smol-toml 原本那樣直接丟掉它。
  • 轉成 TOML 時,巢狀物件會變成 [table] 區段,物件陣列會變成 [[array]] 表格。

你的資料去了哪裡

哪也沒去。本工具完全在你的瀏覽器裡執行:你貼上的文字由頁面處理,不會傳輸到任何伺服器,也不會寫進任何紀錄。

本工具免費且免登入,執行結果只存在於你目前的頁面裡,不會被儲存到任何地方。

它要花多少

本工具完全免費,不需要登入,也不消耗點數。

常見問題

為什麼 null 值會讓轉換停止?
TOML 沒有 null。悄悄略過這個鍵的轉換器,會產生看起來正確、行為卻不同的檔案,所以這裡會拒絕轉換,並以 $.package.homepage 這樣的路徑告訴你位置。移除這個鍵,或給它一個真正的值,例如空字串或 false。
為什麼我的日期時間變回了帶引號的字串?
JSON 沒有日期型別,所以 TOML 日期時間轉成 JSON 時會變成字串。再把那份 JSON 轉回來,得到的是帶引號的字串,而不是不加引號的 TOML 日期,因為 JSON 中沒有任何資訊表示它曾經是日期。如果使用端需要真正的 TOML 日期時間,請移除引號。
註解和鍵的順序會保留嗎?
TOML 轉 JSON 時,鍵的順序會保留。JSON 轉 TOML 時,每個表格的一般鍵會寫在它的子表格之前,因為在 TOML 中,寫在 [table] 標頭之後的鍵屬於那個表格。註解不會保留:解析 TOML 時註解就被捨棄了,因為 JSON 沒有地方放它們,所以經過 JSON 來回轉換一次,資料還在,說明卻沒了。請把 TOML 檔案當作唯一的資料來源,再從它產生 JSON。
非常大的整數會怎樣?
TOML 整數是 64 位元,而 JavaScript 數字只在 2^53 以內才精確。解析器不會把 9007199254740993 捨入成另一個數字,而是回報錯誤。像雪花 ID 這類的值,存成字串比較安全。同樣地,inf 和 nan 也會被拒絕,因為 JSON 無法表示它們。

背後的開源專案

本工具執行在 squirrelchat/smol-toml 之上,以 BSD-3-Clause 授權發布。如果你需要在自己的程式裡實作同樣的能力,直接用這個函式庫。

squirrelchat/smol-toml

也常被稱作

  • toml 轉 json
  • json 轉 toml
  • toml 轉換器
  • toml 線上解析
  • cargo.toml 轉 json
  • pyproject.toml 轉 json