,

TOML

发音 TOML:/ˈtɒməl/(英文),国内一般读作 托姆,全称 Tom’s Obvious, …

发音

TOML:/ˈtɒməl/(英文),国内一般读作 托姆,全称 Tom’s Obvious, Minimal Language

名字来源:Tom 这个人设计的,Obvious Minimal Language(直白极简语言)。

TOML 用来干什么

配置文件格式,专门用来写项目配置,和 JSON / YAML 同类。

  • Rust 的 Cargo.toml(Cargo 项目配置)
  • Python pyproject.toml
  • Golang、Node、Docker、Cloudflare、Terraform 很多工具都支持 TOML
  • 目标:人好读、好写,机器容易解析

JSON 适合机器,写注释麻烦;YAML 缩进容易踩坑;TOML 定位就是配置专用。

TOML 核心格式规则

1. 注释

# 单行注释,没有多行注释

# 这是注释
name = "demo"

2. 键值对(基础)

key = value,等号两边空格可选,推荐加空格 值类型:字符串、整数、浮点数、布尔、日期、数组

name = "页面demo" # 字符串必须双引号
age = 26            # int
price = 99.9        # float
enable = true       # bool,小写true/false

❗字符串必须双引号;布尔只能小写 true / false,不能 True。

3. 表(Table,[表名]),最常用

分组配置,就是 Cargo.toml 里的 [package]、[dependencies]

[package]
name = "myapp"
version = "0.1.0"

[dependencies]
tokio = "1.0"

特性INITOML分段写法[section][section]注释; / #(看程序)固定#数据类型基本只有字符串string/int/float/bool/ 日期 / 数组嵌套分组不原生支持[a.b.c] 子表数组无原生支持原生数组多行文本很难实现"""..."""多行字符串标准无统一标准,各家实现不一样有完整官方规范

子表:[parent.child]

[database.mysql]
host = "127.0.0.1"
port = 3306

4. 数组 []

数组里同类型,逗号分隔

tags = ["rust", "cargo", "toml"]
nums = [1,2,3]

5. 内联表(一行表){}

person = { name = "chen", age = 30 }

6. 多行字符串(三个双引号)

desc = """
第一行
第二行
"""

⚠️ TOML 坑点(非常重要,写 Cargo.toml 经常踩)

  1. 大小写敏感:Name 和 name 是两个不同 key
  2. 字符串单引号是原始字符串,不会转义;双引号会解析 \n、\t
raw = 'c:\test\file'   # 不用转义 \
str = "c:\\test\\file" # 双引号要转义
  1. 数组元素尽量保持同一类型,很多解析器不支持混合类型
  2. 不能用 tab 缩进,只用空格(现代解析器大多兼容,但规范禁止 tab)
  3. 不能写重复的 [table],重复定义同一个表会报错

和 JSON / YAML 简单对比

表格

格式特点
TOML配置文件,结构清晰,支持注释,无缩进陷阱;Cargo/pyproject 首选
JSON数据交换,不能注释,适合接口传输
YAML缩进驱动,注释支持,缩进错就崩,复杂配置容易出问题

TOML 起源就是想改进 INI

TOML 设计初衷就是增强版 INI,长得非常像:都用 [section] 分组、key=value、#注释。 但 INI 能力很弱,TOML 在它基础上做了大量扩展。

外观对比

INI

[package]
name=hello
version=0.1.0

[dependencies]
serde = 1.0

TOML

[package]
name = "hello"
version = "0.1.0"

[dependencies]
serde = "1.0"

总结

特性INITOML
分段写法[section][section]
注释; / #(看程序)固定#
数据类型基本只有字符串string/int/float/bool/ 日期 / 数组
嵌套分组不原生支持[a.b.c] 子表
数组无原生支持原生数组
多行文本很难实现"""..."""多行字符串
标准无统一标准,各家实现不一样有完整官方规范

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Latest News

View All

About the Author

每个人都有自己得时区,在自己得时区里,一切都是准时的。

BlockSpare — News, Magazine and Blog Addons for (Gutenberg) Block Editor

You May Have Missed