YAML 知识小课堂

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:25isStudent:falsehobbies:-编程-阅读-音乐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-06ISO 8601
时间2024-07-06T12:00:00+08:00带时区

❌ 常见错误(速记版)

错误写法正确写法速记原因
name:"Tom"name: "Tom"冒号后面必须带空格
Tab 缩进空格缩进YAML 不认 Tab,只用空格
field: undefinedfield: null/field: ~YAML 没有 undefined,空值只用null/~
code: 08080code: "08080"0开头数字易变八进制,加引号锁死字符串
switch: yesswitch: "yes"yes/no会被转布尔,文字要加引号
2空格、4空格混用缩进全局统一缩进空格数缩进乱,直接解析报错
empty: ""当作空值empty: null空字符串≠空值,两种类型不能混用

🚀 实际应用示例

Docker Compose
services:web:image:nginx:latestports:-"80:80"environment:NODE_ENV:production

Kubernetes
apiVersion:v1kind:Podmetadata:name:my-podspec:containers:-name:nginximage:nginx:1.21ports:-containerPort:80

Spring Boot
server:port:8080spring:datasource:url:jdbc:mysql://localhost:3306/mydbusername:rootpassword:secret

🔧 进阶语法

多行字符串

保留换行:

description:|第一行 第二行 第三行

折叠为一行:

summary:>这是一段很长的文字 会被折叠成一行

锚点与引用(复用配置)

defaults:&defaultsadapter:postgreshost:localhostdevelopment:<<:*defaultsdatabase:dev_dbproduction:<<:*defaultshost:prod-db.example.com

类型强制转换

age:!!str25flag:!!bool"true"price:!!float"9.99"

📌 YAML 速查总结

  • ✔ 使用缩进表示结构(禁止 Tab)
  • ✔ 键值对:key: value
  • ✔ 列表:- item
  • ✔ 支持注释:# comment
  • ✔ 支持多行字符串(|/>
  • ✔ 支持引用(&/*/<<
  • ✔ 适合配置文件与 DevOps 场景
测试效果


🎯 一句话总结

YAML 的本质是:

用“人类友好的缩进结构”替代“机器友好的括号结构”。

📝 实战互动征集:

结合项目场景聊聊,你会优先选 JSON 还是 YAML?欢迎在评论区分享你的选型思路与实操技巧。