张芷铭的个人博客

[[TOML vs JSON vs YAML vs INI 全方位对比]]

TOML(Tom’s Obvious, Minimal Language)由 GitHub 联合创始人 Tom Preston-Werner 创建,设计理念:语义直观、语法极简、无歧义映射为哈希表。

基础规则

  • 编码:UTF-8
  • 注释# 开头,支持行内注释
  • 大小写敏感Namename 不同

键值对

键的写法

类型示例说明
基本键name = "TOML"字母、数字、下划线、连字符
引号键"first name" = "Tom"包含空格或特殊字符
点分隔author.name = "Tom"等价于嵌套表

值类型

类型示例
字符串str = "hello\nworld"raw = '''不转义'''
整数age = 42big = 1_000_000
浮点数pi = 3.14exp = 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