
什么是 TOML?
TOML(Tom's Obvious, Minimal Language)是一种配置文件格式,旨在易于读写,且语义明确。它由 Tom Preston-Werner(GitHub 联合创始人)创建,作为 INI 文件的替代方案,支持更丰富的数据类型。
TOML 广泛应用于:
- Rust 项目(Cargo.toml)
- Python 项目(pyproject.toml)
- Hugo 静态站点生成器
- Gitea/Forgejo 配置
- 许多其他开发者工具

TOML 语法
TOML 使用清晰、基于节的结构:
# This is a TOML configuration file
[package]
name = "my-project"
version = "1.0.0"
edition = "2021"
[dependencies]
serde = { version = "1.0", features = ["derive"] }
tokio = "1.0"
[server]
host = "0.0.0.0"
port = 8080
workers = 4
[[environments]]
name = "development"
debug = true
[[environments]]
name = "production"
debug = false
TOML 数据类型
TOML 具有显式、强类型的值:
| 类型 | 示例 |
|---|---|
| 字符串 | "hello" 或 'literal' |
| 整数 | 42 或 0xFF 或 1_000_000 |
| 浮点数 | 3.14 或 6.022e23 |
| 布尔值 | true / false |
| 日期时间 | 1979-05-27T07:32:00Z |
| 本地日期 | 1979-05-27 |
| 本地时间 | 07:32:00 |
| 数组 | [1, 2, 3] |
| 内联表 | {name = "Alice", age = 30} |
TOML 的显式类型避免了 YAML 中有时出现的歧义(例如 true 和 "true" 可能混淆)。

等效的 JSON
将上面的 TOML 示例转换:
{
"package": {
"name": "my-project",
"version": "1.0.0",
"edition": "2021"
},
"dependencies": {
"serde": {
"version": "1.0",
"features": ["derive"]
},
"tokio": "1.0"
},
"server": {
"host": "0.0.0.0",
"port": 8080,
"workers": 4
},
"environments": [
{"name": "development", "debug": true},
{"name": "production", "debug": false}
]
}
注意:TOML 的 [[environments]](表数组)变成了 JSON 数组。
TOML vs. JSON vs. YAML
| 特性 | TOML | JSON | YAML |
|---|---|---|---|
| 注释 | 支持 | 不支持 | 支持 |
| 强类型 | 是 | 部分 | 否 |
| 多行字符串 | 支持 | 不支持(使用 \n) | 支持 |
| 人类可读性 | 高 | 中 | 高 |
| 日期/时间支持 | 原生 | 仅字符串 | 部分 |
| 表数组 | 优雅 | 冗长 | 冗长 |
| 锚点/别名 | 不支持 | 不支持 | 支持 |
| 规范复杂度 | 低 | 低 | 高 |

何时使用 TOML vs. JSON
使用 TOML 当:
- 编写需要人工编辑的配置文件
- 在 Rust/Python 生态系统中工作
- 需要日期/时间类型支持
- 注释对文档很重要
使用 JSON 当:
- 与 Web API 通信
- 以编程方式生成配置
- 需要最大的解析器兼容性
- 在 JavaScript/Node.js 环境中工作
使用 TOML 转 JSON 转换器
我们的转换器:
- 粘贴 TOML 配置 到输入框
- 即时获取 JSON 输出,格式正确
- 处理所有 TOML 类型,包括日期、时间和表数组
- 语法验证,带有有用的错误消息
- 复制或下载 生成的 JSON
适用于将 TOML 配置的工具与基于 JSON 的 API 集成、调试配置以及通过查看等效的 JSON 表示来理解 TOML 结构。