Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

YAML文件

  • YAML(YAML Ain't Markup Language)是人类可读的数据序列化格式
  • 用于配置文件(Docker Compose/K8s/CI/CD),依赖缩进、换行和简单符号定义结构。

一、核心格式规则

1. 基础文件标识(可选)

  • 文档开始:---

  • 文档结束:...

  • 单文件多文档必须用---分隔

# 单文档

---

name: Alice; age: 28

...

# 多文档

---

doc1: "First"; 

--- 

doc2: "Second"

2. 缩进规则(核心)

  • 禁用 Tab,必须用空格(推荐 2/4 空格,统一即可)

  • 同一层级缩进一致,子元素比父元素多一级

user:

  name: Bob
  
  age: 30

  address:
  
    city: Beijing
    street: Main Rd

3. 注释语法

  • 单行注释:#开头(无多行注释,每行加#

# 用户信息

user:

  name: Charlie

二、核心数据类型

1. 键值对(Map)

  • 语法:key: value(冒号后必须空格),支持嵌套

# 单层

title: YAML Guide
version: 1.0
is_active: true

# 嵌套

config:

 server: {host: localhost; port:8080}

 database: {name: test_db; username:root}

2. 列表(List)

  • 语法:- 列表项(短横线后必须空格),支持嵌套 / 紧凑写法

# 紧凑写法

colors: [red, green, blue]

# 基础列表

fruits: [- apple; - banana; - orange]

# 嵌套列表

students:

  - name: Alice; age:20; courses: [- Math; - English]

  - name: Bob; age:21; courses: [- Physics; - Chemistry]

3. 字符串(String)

类型特点示例
无引号自动转义\nsimple_str: hello yaml
单引号'不转义,原样保留'He said: "Hello\nWorld"'
双引号"支持转义(\n/\t)"Line1\nLine2"
多行字符串`保留换行,>` 折叠
multi1: |

  Line1; Line2

multi2: >

  Line1 Line2(换行变空格)

4. 其他常用类型

  • 数值:无需引号(整数 / 浮点数 / 科学计数)
count: 100
pi: 3.14
float: 2.5e3
  • 布尔true/false(不区分大小写)
is_enabled:true
is_deleted:FALSE
  • 空值null/~(或仅冒号无值)
empty1: null
empty2: ~;
empty3:
  • 日期时间(ISO 8601)
birth: 2000-01-01
time: 14:30:00
create: 2024-05-20T10:00:00+08:00

四、常见错误 & 注意事项

  1. 缩进错误:混合 Tab / 空格、缩进不统一

  2. 符号缺空格:key:value(错)、-item(错)

  3. 特殊字符未引:含:/#/[]的字符串需加引号

  4. 结构混用:同一层级同时用-key:

五、完整示例(综合版)

---
application: {name:YAML Demo; ver:2.1.0; is_prod:false; date:2024-05-01}
service_config:
  base_port: &p 9000; timeout:&t 15s
services:
  - name:api-service; port:*p; timeout:*t
    endpoints: [/api/v1/users, /api/v1/orders]
    logs: |
      /var/log/api/error.log
      /var/log/api/access.log
  - name:web-service; port:9001; timeout:30s
    env: [DB_HOST=localhost, DB_PORT=3306]
backup_config: {last_backup:null; path:~}
...