[[TOML vs JSON vs YAML vs INI 全方位对比]]
TOML(Tom’s Obvious, Minimal Language)由 GitHub 联合创始人 Tom Preston-Werner 创建,设计理念:语义直观、语法极简、无歧义映射为哈希表。
基础规则
- 编码:UTF-8
- 注释:
# 开头,支持行内注释 - 大小写敏感:
Name 和 name 不同
键值对
键的写法
| 类型 | 示例 | 说明 |
|---|
| 基本键 | name = "TOML" | 字母、数字、下划线、连字符 |
| 引号键 | "first name" = "Tom" | 包含空格或特殊字符 |
| 点分隔 | author.name = "Tom" | 等价于嵌套表 |
值类型
| 类型 | 示例 |
|---|
| 字符串 | str = "hello\nworld" 或 raw = '''不转义''' |
| 整数 | age = 42 或 big = 1_000_000 |
| 浮点数 | pi = 3.14 或 exp = 1e6 |
| 布尔值 | valid = true(仅小写) |
| 日期时间 | dt = 1979-05-27T07:32:00Z(ISO 8601) |
复合类型
数组
1
2
3
| numbers = [1, 2, 3]
fruits = ["apple", "banana"]
nested = [[1, 2], [3, 4]] # 元素类型必须一致
|
内联表
1
2
3
4
5
| author = { name = "Tom", age = 42 }
# 等价于
[author]
name = "Tom"
age = 42
|
表(Tables)
基本表
1
2
3
| [database]
server = "192.168.1.1"
port = 5432
|
嵌套表
1
2
| [database.connection]
timeout = 30
|
数组表
1
2
3
4
5
6
7
8
| [[users]]
name = "Alice"
age = 25
[[users]]
name = "Bob"
age = 30
# 等价于 JSON: {"users": [{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}]}
|
多行字符串
1
2
3
4
5
6
7
8
9
10
| # 基本多行(支持转义)
multi = """
hello
world
"""
# 原始多行(不转义)
raw = '''
path: C:\Users\Tom
'''
|
完整示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| title = "项目配置"
version = "1.0.0"
[author]
name = "Tom"
skills = ["coding", "design"]
[database]
server = "192.168.1.1"
port = 5432
[[environments]]
name = "dev"
url = "http://dev.example.com"
[[environments]]
name = "prod"
url = "https://prod.example.com"
|
总结
- 键值对为基础,表组织结构化数据
- 数组元素类型必须一致
- 支持注释、多行字符串、日期时间
- 兼顾人类可读性和机器解析效率
Comments