什么是 TOML?
TOML 是一种配置文件格式,设计目标是因其显而易见的语义而易于阅读,能够明确映射到哈希表同时保持解析简单。
快速了解
| 全称 | Tom 的显而易见的最小化语言 |
|---|---|
| 创建时间 | 2013 年,由 Tom Preston-Werner 创建 |
| 规范文档 | 官方规范 |
工作原理
TOML 由 Tom Preston-Werner(GitHub 联合创始人)于 2013 年创建,作为一种优先考虑人类可读性和简洁性的配置格式。与可能复杂且因显著空白而容易出错的 YAML 不同,TOML 使用带有清晰分隔符的显式语法。它直接映射到哈希表,非常适合配置文件。TOML 支持字符串、整数、浮点数、布尔值、日期时间、数组和表(节)。注释以 # 开头。该格式在 Rust 生态系统(Cargo.toml)、Python 打包(pyproject.toml)和各种其他工具中获得广泛使用。TOML 在 JSON 的严格性和 YAML 的灵活性之间取得平衡,避免了 YAML 的陷阱,如「挪威问题」(NO 被解释为 false)。其显式的日期时间支持和清晰的表语法使其特别适合应用程序配置。
主要特点
- 人类可读,语法显而易见且最小化
- 直接映射到哈希表/字典
- 显式支持日期时间(ISO 8601 格式)
- 支持表(节)和嵌套表
- 使用 # 注释(不像 JSON)
- 无显著空白问题(不像 YAML)
常见用途
- Rust 项目配置(Cargo.toml)
- Python 打包(pyproject.toml)
- 应用程序配置文件
- 静态网站生成器(Hugo、Zola)
- 开发工具配置
示例
Loading code...常见问题
TOML 和 YAML 有什么区别?各自适合什么场景?
TOML 使用显式语法,无显著空白问题,更不容易出错;YAML 依赖缩进,语法更灵活但容易因空白导致错误。TOML 适合简单到中等复杂度的配置文件,如 Cargo.toml、pyproject.toml;YAML 适合需要复杂嵌套结构的场景,如 Kubernetes 配置、CI/CD 流水线。TOML 更安全,YAML 更灵活。
TOML 中的表(Table)和数组表(Array of Tables)如何使用?
表用 [table_name] 定义,表示一个键值对集合,类似于字典。数组表用 [[array_name]] 定义,每次出现创建数组中的一个新元素。例如,[[servers]] 可以定义多个服务器配置。嵌套表用点号分隔,如 [servers.alpha]。这种结构清晰地映射到编程语言中的数据结构。
为什么 Rust 和 Python 生态系统广泛采用 TOML?
Rust 的 Cargo 和 Python 的 pyproject.toml 选择 TOML 因为:语法简单直观、不易出错、原生支持日期时间类型、直接映射到哈希表便于解析、支持注释便于文档化配置。Tom Preston-Werner(GitHub 创始人)创建 TOML 时就考虑了配置文件的实际需求,使其成为项目配置的理想选择。
TOML 支持哪些数据类型?
TOML 支持的数据类型包括:字符串(基本字符串和多行字符串)、整数、浮点数、布尔值、日期时间(本地日期、本地时间、带时区的日期时间)、数组(同类型元素)和表(键值对集合)。特别值得注意的是,TOML 原生支持 ISO 8601 格式的日期时间,这是 JSON 所不具备的。
如何从 JSON 或 YAML 迁移到 TOML?
迁移步骤:1)分析现有配置结构,确定是否适合 TOML(过于复杂的嵌套可能不适合);2)将对象转换为 TOML 表,数组转换为 TOML 数组或数组表;3)利用 TOML 的注释功能添加文档;4)使用在线转换工具辅助转换;5)验证转换后的文件语法正确。注意 TOML 不支持 null 值,需要特殊处理。