1. YAML模块核心概念解析
YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化语言,自2001年首次发布以来已成为配置文件和应用程序数据交换的事实标准。与XML和JSON相比,YAML通过更简洁的语法和更自然的表达方式降低了数据描述的复杂度。
1.1 基本语法特性
YAML文件使用UTF-8/16/32编码,主要依赖缩进来表示数据结构层次(注意不能使用Tab键缩进)。其核心语法元素包括:
- 键值对使用
key: value格式,冒号后必须跟空格 - 列表项以
-开头(短横线加空格) - 注释以
#开头 - 多文档使用
---分隔 - 文档结束标记
...(可选)
yaml复制# 示例配置文件
server:
host: 192.168.1.100
ports:
- 8080
- 8081
environment: production
1.2 数据类型系统
YAML原生支持以下数据类型:
-
标量类型:
- 字符串(默认不需要引号)
- 整数(如
42) - 浮点数(如
3.14) - 布尔值(
true/false) - Null值(
null或~)
-
集合类型:
- 序列(列表):使用
-或[]表示 - 映射(字典):使用
key: value或{}表示
- 序列(列表):使用
-
特殊类型:
- 时间戳(ISO8601格式)
- 二进制数据(
!!binary标签) - 自定义类型(通过
!!标签定义)
yaml复制# 数据类型示例
string_value: Hello World
number_value: 3.1415
boolean_value: true
list_value:
- item1
- item2
dict_value:
key1: value1
key2: value2
timestamp: 2024-03-15T12:00:00Z
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. YAML高级特性与应用场景
2.1 文档结构与复用机制
YAML支持多文档结构和内容复用,这是其区别于JSON的重要特性:
- 多文档流:单个文件可包含多个文档,用
---分隔 - 锚点与引用:
- 使用
&定义锚点 - 使用
*引用锚点
- 使用
- 合并键:
<<用于合并映射内容
yaml复制# 复用示例
defaults: &defaults
adapter: postgres
host: localhost
development:
<<: *defaults
database: dev_db
production:
<<: *defaults
database: prod_db
host: prod-server.example.com
2.2 多行字符串处理
YAML提供两种多行字符串表示方式:
-
保留换行符(
|):- 保留所有换行和缩进
- 适合代码片段、配置文本
-
折叠换行符(
>):- 将换行转换为空格
- 适合长段落文本
yaml复制# 多行字符串示例
preserved: |
line1
line2
line3
folded: >
this is a very long
sentence that will
be folded into one line
2.3 实际应用场景
- 配置文件(如Kubernetes、Docker Compose)
- 测试框架配置(如pytest + YAML)
- API规范(如OpenAPI/Swagger)
- 数据序列化(替代JSON用于复杂结构)
- CI/CD流水线定义(如GitLab CI、GitHub Actions)
yaml复制# Kubernetes Deployment示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
3. YAML模块开发实践
3.1 各语言中的YAML处理
主流编程语言都提供了成熟的YAML处理库:
| 语言 | 主要库 | 特点 |
|---|---|---|
| Python | PyYAML/ruamel.yaml | ruamel.ya |
