YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化格式,主要用于配置文件和数据交换。
YAML 的核心特性
- 简洁性:使用缩进和空格来表示数据结构,不需要复杂的标签或括号
- 可读性:设计初衷就是让人类易于阅读和编写
- 跨语言支持:几乎所有主流编程语言都有 YAML 解析器
- 数据类型丰富:支持标量、列表、映射、自定义类型等
YAML 与其他格式的对比
与 JSON 对比
- YAML 是 JSON 的超集,所有有效的 JSON 都是有效的 YAML
- YAML 支持注释,JSON 不支持
- YAML 语法更简洁,JSON 语法更严格
- YAML 支持多行字符串,JSON 不支持
与 XML 对比
- YAML 语法更简洁,XML 需要开始和结束标签
- YAML 更易读,XML 更适合机器解析
- YAML 支持更丰富的数据类型
- XML 有更成熟的验证机制(Schema、DTD)
YAML 的应用场景
- 配置文件:Kubernetes、Docker Compose、CI/CD 管道配置
- 数据交换:API 响应、数据存储
- 文档编写:技术文档、API 文档
- 自动化脚本:工作流定义、任务配置
YAML 的基本语法规则
- 缩进:使用空格(推荐 2 个空格),不使用 Tab
- 键值对:使用冒号分隔,冒号后必须有空格
- 列表:使用连字符
-开头 - 注释:使用
#符号 - 多行字符串:使用
|保留换行,使用>折叠换行
示例
yaml# 这是一个 YAML 配置文件示例 server: host: localhost port: 8080 features: - authentication - logging - monitoring database: type: postgresql connection: | host=db.example.com port=5432 dbname=myapp
常见问题
- 缩进错误:混用空格和 Tab 会导致解析失败
- 类型转换:YAML 会自动推断数据类型,有时需要显式指定
- 特殊字符:某些字符需要转义或使用引号
- 版本兼容性:不同 YAML 解析器可能存在细微差异
最佳实践
- 始终使用空格缩进,避免使用 Tab
- 保持一致的缩进级别(推荐 2 个空格)
- 为复杂配置添加注释
- 使用 YAML Schema 验证配置文件
- 对于敏感数据,考虑使用环境变量或加密存储