YAML(YAML Ain’t a Markup Language)是一种人类可读的数据序列化语言,由 Clark Evans、Ingy döt Net 和 Oren Ben-Kiki 于 2001 年提出。
它以缩进表示结构,广泛用于配置文件与数据交换场景。
💡 核心特点:YAML 是 JSON 的超集
所有合法 JSON 都是合法 YAML,但 YAML 更简洁易读。
✨ 核心特点
| 特性 | 说明 |
|---|---|
| 可读性强 | 接近自然语言,结构清晰 |
| 支持注释 | 使用 # 添加说明 |
| 跨语言 | 主流编程语言均支持解析 |
| JSON 兼容 | 可直接包含 JSON 风格数据 |
| 简洁表达 | 依赖缩进而非括号结构 |
###🛠️ 基本语法
name: 张三
age: 25
isStudent: false
hobbies:
- 编程
- 阅读
- 音乐
address:
city: 北京
zip: "100000"
📊 数据类型说明
| 类型 | 示例 | 说明 |
|---|---|---|
| 字符串 | hello / "hello world" | 一般无需引号,特殊情况需加 |
| 整数 | 42 | 自动识别 |
| 浮点数 | 3.14 | 自动识别 |
| 布尔值 | true / false | 也支持 yes/no、on/off |
| 空值 | null 或 ~ | 等价 |
| 数组 | - item 或 [1,2,3] | 支持块级与行内 |
| 对象 | key: value | 缩进表示层级 |
| 日期 | 2024-07-06 | ISO 8601 |
| 时间 | 2024-07-06T12:00:00+08:00 | 带时区 |
❌ 常见错误(速记版)
| 错误写法 | 正确写法 | 速记原因 |
|---|---|---|
name:"Tom" | name: "Tom" | 冒号后面必须带空格 |
| Tab 缩进 | 空格缩进 | YAML 不认 Tab,只用空格 |
field: undefined | field: null / field: ~ | YAML 没有 undefined,空值只用null/~ |
code: 08080 | code: "08080" | 0开头数字易变八进制,加引号锁死字符串 |
switch: yes | switch: "yes" | yes/no会被转布尔,文字要加引号 |
| 2空格、4空格混用缩进 | 全局统一缩进空格数 | 缩进乱,直接解析报错 |
empty: "" 当作空值 | empty: null | 空字符串≠空值,两种类型不能混用 |
🚀 实际应用示例
Docker Compose
services:
web:
image: nginx:latest
ports:
- "80:80"
environment:
NODE_ENV: production
Kubernetes
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80
Spring Boot
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: secret
🔧 进阶语法
多行字符串
保留换行:
description: |
第一行
第二行
第三行
折叠为一行:
summary: >
这是一段很长的文字
会被折叠成一行
锚点与引用(复用配置)
defaults: &defaults
adapter: postgres
host: localhost
development:
<<: *defaults
database: dev_db
production:
<<: *defaults
host: prod-db.example.com
类型强制转换
age: !!str 25
flag: !!bool "true"
price: !!float "9.99"
📌 YAML 速查总结
- ✔ 使用缩进表示结构(禁止 Tab)
- ✔ 键值对:
key: value - ✔ 列表:
- item - ✔ 支持注释:
# comment - ✔ 支持多行字符串(
|/>) - ✔ 支持引用(
&/*/<<) - ✔ 适合配置文件与 DevOps 场景
测试效果

🎯 一句话总结
YAML 的本质是:
用“人类友好的缩进结构”替代“机器友好的括号结构”。
📝 实战互动征集:
结合项目场景聊聊,你会优先选 JSON 还是 YAML?欢迎在评论区分享你的选型思路与实操技巧。
244



被折叠的 条评论
为什么被折叠?



