博客 / 詳情

返回

TOML 格式簡介

TOML(Tom's Obvious, Minimal Language)是為配置文件設計的序列化格式,目標是簡潔、可讀且易於手寫。常用於項目配置(如 Rust 的 Cargo、Python 的 Poetry、各類工具的配置文件)。下面概要説明其特性、示例及與 JSON 的對比,幫助選擇合適場景。

核心特點(簡要)

  • 面向配置:設計用於人類編輯的配置文件。
  • 支持註釋:使用 #
  • 明確的原生類型:字符串、整數、浮點、布爾、日期時間、數組、表(table)。
  • 表與表數組:便於層級組織配置。
  • 可讀性高:語法更接近 INI,但類型更豐富。

基本語法示例

toml
# filepath: example.toml
title = "示例配置"
owner = { name = "Alice", dob = 1979-05-27T07:32:00Z }

[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
enabled = true
ratio = 0.75

[[products]]
name = "Hammer"
sku = 738594937

[[products]]
name = "Nail"
sku = 284758393
color = "gray"

對應的 JSON(同語義):

json
{
  "title": "示例配置",
  "owner": { "name": "Alice", "dob": "1979-05-27T07:32:00Z" },
  "database": {
    "server": "192.168.1.1",
    "ports": [8001, 8001, 8002],
    "enabled": true,
    "ratio": 0.75
  },
  "products": [
    { "name": "Hammer", "sku": 738594937 },
    { "name": "Nail", "sku": 284758393, "color": "gray" }
  ]
}

與 JSON 的對比(要點)

  • 可讀性

    • TOML:面向人類,允許註釋,表結構清晰,適合手動維護配置。
    • JSON:緊湊、標準化但不支持註釋(配置場景常被詬病)。
  • 類型與語義

    • TOML:內建 datetime、明確定義整數/浮點/布爾/數組/嵌套表。
    • JSON:基本類型(string/number/boolean/null/array/object),日期通常以字符串表示並需約定格式。
  • 可寫性(手工編輯)

    • TOML 更友好(註釋、表語法、行內表等)。
  • 生態與工具支持

    • JSON:極其普及,原生支持於多數語言(尤其 JavaScript),適合數據交換和 API。
    • TOML:配置使用廣泛,解析器越來越多,但在某些語言/平台的支持不如 JSON 全面。
  • 機器可處理性 / 互操作性

    • JSON 更通用、輕量、網絡傳輸更常用(很多網絡協議以 JSON 為默認)。
    • TOML 更適合作為靜態配置文件,而非頻繁網絡交互的序列化格式。
  • 註釋與可維護性

    • TOML 支持註釋,便於説明配置項;JSON 不支持(需要外部文檔或自定義字段)。
  • 嚴格性與規範

    • TOML 標準嚴格(v1.0.0),對類型/轉義等有明確定義。
    • JSON 標準成熟且廣泛實現。

何時使用哪個

  • 選擇 TOML:

    • 配置文件需多人手工編輯、希望內置註釋和日期類型(例如項目配置、工具配置)。
    • 需要層級清晰的可讀配置文件。
  • 選擇 JSON:

    • 數據交換(API、前後端通信)、日誌或需要廣泛兼容性的場景。
    • 需要最廣泛的庫與語言支持,或嵌入到 JavaScript 環境中。

優點/缺點快速概覽

  • TOML 優點:可讀性高、支持註釋、類型豐富(datetime)、表語法直觀。
    缺點:生態和解析器不及 JSON 廣泛;用於網絡傳輸場景不夠普及。
  • JSON 優點:極度普及、格式緊湊、語言原生支持(JS)。
    缺點:不支持註釋、日期需自定義約定,手寫維護時可讀性和可註釋性較差。

工具與注意事項

  • 常見解析庫:各語言均有 TOML 解析器(toml-rs、toml for Python、toml-js 等)。
  • 版本:使用 TOML v1.0+ 時注意解析器是否兼容。
  • 與環境變量/模板結合使用時,配置文件往往需要轉換或合併,選擇前確定生態支持。

總結:TOML 是面向配置文件的優秀選擇(註釋友好、類型豐富);JSON 則是數據交換與平台互操作的首選。根據用途(配置 vs 數據交換)、可維護性與生態支持來決定使用哪種格式。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.