张芷铭的个人博客

TOML、JSON、YAML 是三种主流配置与数据交换格式,各有优劣:JSON 性能最高,YAML 功能最丰富,TOML 语法最清晰。

格式对比

基本语法示例

JSON:

1
2
3
4
5
{
  "name": "John Doe",
  "age": 30,
  "hobbies": ["reading", "hiking"]
}

YAML:

1
2
3
4
5
name: John Doe
age: 30
hobbies:
  - reading
  - hiking

TOML:

1
2
3
name = "John Doe"
age = 30
hobbies = ["reading", "hiking"]

数据类型支持

类型JSONYAMLTOML
字符串/数字/布尔/null✔️✔️✔️
数组/对象✔️✔️✔️
日期时间✔️✔️
多行字符串✔️ (|>)✔️ ("""''')
注释✔️ (#)✔️ (#)
引用/锚点✔️ (&*)

语法特性

格式特点
JSON键必须加引号、无尾随逗号、无注释、解析最快
YAML缩进敏感、支持引用和合并、多文档支持(--- 分隔)、解析最慢
TOML明确的键值对语法、[table] 结构、原生日期时间、无缩进问题

性能对比

指标JSONTOMLYAML
解析速度最快中等最慢(比 JSON 慢 5-50 倍)
内存占用中等最低最高
实现复杂度最低中等最高

适用场景

场景推荐格式
Web API 数据交换JSON
高性能解析需求JSON
人类频繁编辑的复杂配置YAML
Kubernetes 等基础设施配置YAML
应用程序配置文件TOML
需要日期时间原生支持TOML
避免缩进相关错误TOML/JSON

安全考量

格式风险
JSONJSON 注入、大数字精度问题
YAML某些实现可执行任意代码、循环引用
TOML相对最安全,无代码执行风险

相互转换

1
2
3
4
5
6
7
import json, yaml, toml

# JSON to YAML
yaml_data = yaml.dump(json.loads(json_str))

# TOML to JSON
json_data = json.dumps(toml.loads(toml_str))

最佳实践

格式建议
JSON使用 JSON Schema 验证、避免手工编辑
YAML使用明确类型标记(!!str)、避免过度复杂的锚点
TOML利用表结构组织配置、使用内联表简化结构

选择指南

需求选择
最高性能JSON
人类可读性优先YAML 或 TOML
简单配置TOML
复杂配置YAML
需要注释YAML 或 TOML

微服务架构中常见混合使用:JSON 用于服务间通信,YAML 用于复杂配置,TOML 用于应用配置。

Comments