YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化格式,常用于配置文件、数据交换等场景。它以简洁、清晰的语法著称,比 JSON 更易读写,比 XML 更轻量。
一、YAML 的基本特点
- 缩进表示层级关系(使用空格,不能用 Tab)
- 大小写敏感
- 支持注释 (以
#开头) - 数据结构包括:标量(scalar)、映射(map / object)、序列(list / array)
二、基本语法示例
1. 标量(Scalar)
表示单个值,如字符串、数字、布尔值等。
yaml
name: Alice
age: 30
is_student: false
注意:字符串通常不需要加引号,除非包含特殊字符或冒号等。
2. 映射(Map / Dictionary / Object)
键值对结构,用冒号+空格分隔键和值。
yaml
person:
name: Bob
age: 25
city: "New York"
3. 序列(List / Array)
用短横线 - 表示列表项。
yaml
fruits:
- apple
- banana
- orange
也可以写成行内形式(类似 JSON):
yaml
colors: [red, green, blue]
4. 嵌套结构(组合使用)
yaml
school:
name: Sunshine High
students:
- name: Tom
grade: 10
- name: Lily
grade: 11
三、常用规则与注意事项
| 规则 | 说明 |
|---|---|
| 缩进必须一致 | 使用空格(推荐 2 个空格),不能混用 Tab |
| 冒号后必须有空格 | 如 key: value ✅,key:value ❌ |
| 字符串引号可选 | 但含特殊字符(如 :, {}, [], # 等)时建议加引号 |
| 支持多行字符串 | 使用 ` |
多行字符串示例:
yaml
description: |
这是一段
多行文本,
每行都会保留换行。
summary: >
这也是一段
多行文本,
但会被合并成一行。
四、YAML 中的特殊类型
1. 布尔值
yaml
active: true
enabled: false
2. null 值
yaml
middle_name: null
# 或者
middle_name: ~
3. 数字
yaml
price: 19.99
count: 100
hex: 0xFF # 十六进制(部分解析器支持)
4. 时间(部分解析器支持)
yaml
created_at: 2026-02-02T12:00:00Z
五、YAML vs JSON
| 特性 | YAML | JSON |
|---|---|---|
| 可读性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 支持注释 | ✅ | ❌ |
| 缩进敏感 | ✅ | ❌ |
| 字符串必须引号 | ❌ | ✅ |
| 被广泛用于配置文件 | ✅(如 Docker Compose, Kubernetes, Ansible) | 较少用于人工编写配置 |
💡 实际上,所有合法的 JSON 都是合法的 YAML(YAML 是 JSON 的超集)。
六、常见应用场景
- Docker Compose :
docker-compose.yml - Kubernetes :部署配置文件
.yaml - CI/CD 配置 :GitHub Actions (
workflow.yml)、GitLab CI - Ansible Playbook
- Spring Boot 配置 :
application.yml
七、验证与编辑建议
- 在线校验工具:https://www.yamllint.com/
- VS Code 插件:安装 "YAML" 插件(由 Red Hat 提供),支持自动格式化、错误提示、智能补全
- 缩进设置:确保编辑器将 Tab 转为空格(通常设为 2 空格)
八、小练习(试试看能否写出正确 YAML)
需求:描述一个博客文章,包含标题、作者、标签列表、是否发布、正文内容(多行)。
yaml
title: 学习 YAML 入门指南
author: Qwen
tags:
- yaml
- config
- tutorial
published: true
content: |
这是一篇关于 YAML 的入门文章。
它介绍了基本语法和常见用法,
帮助你快速上手!
掌握 YAML 的关键是注意缩进和空格,多写多练即可熟练。它虽然简单,但在 DevOps 和现代开发中无处不在,值得花时间掌握!