YAML 速查表
这是理解和编写 YAML 格式配置文件的速查表,帮助新手快速入门。
入门
介绍
YAML 是一种数据序列化语言,旨在供人类直接读写
- YAML 不允许使用制表符
- 元素部分之间必须有空间
- YAML 区分大小写
- 以 .yaml或.yml扩展名结束您的 YAML 文件
- YAML 是 JSON 的超集
- Ansible playbook 是 YAML 文件
标量类型
n1: 1            # 整数
n2: 1.234        # 浮点
s1: 'abc'        # 字符串
s2: "abc"        # 字符串
s3: abc          # 字符串
b: false         # 布尔类型
d: 2015-04-05    # 日期类型
↓ 等效的 JSON
{
  "n1": 1,
  "n2": 1.234,
  "s1": "abc",
  "s2": "abc",
  "s3": "abc",
  "b": false,
  "d": "2015-04-05"
}
使用空格缩进。 元素部分之间必须有空间。
变量
some_thing: &VAR_NAME foobar
other_thing: *VAR_NAME
↓ 等效的 JSON
{
  "some_thing": "foobar",
  "other_thing": "foobar"
}
注释
# A single line comment example
# block level comment example
# comment line 1
# comment line 2
# comment line 3
多行字符串
description: |
  hello
  world
↓ 等效的 JSON
{"description": "hello\nworld\n"}
继承
parent: &defaults
  a: 2
  b: 3
child:
  <<: *defaults
  b: 4
↓ 等效的 JSON
{
  "parent": {
    "a": 2,
    "b": 3
  },
  "child": {
    "a": 2,
    "b": 4
  }
}
参考
values: &ref
  - Will be
  - reused below
other_values:
  i_am_ref: *ref
↓ 等效的 JSON
{
  "values": [
    "Will be",
    "reused below"
  ],
  "other_values": {
    "i_am_ref": [
      "Will be",
      "reused below"
    ]
  }
}
折叠的字符串
description: >
  hello
  world
↓ 等效的 JSON
{"description": "hello world\n"}
两份文件
---
document: this is doc 1
---
document: this is doc 2
YAML使用---将指令与文档内容分开。
YAML Collections
序列
- Mark McGwire
- Sammy Sosa
- Ken Griffey
↓ 等效的 JSON
[
  "Mark McGwire",
  "Sammy Sosa",
  "Ken Griffey"
]
映射
hr:  65       # Home runs
avg: 0.278    # Batting average
rbi: 147      # Runs Batted In
↓ 等效的 JSON
{
  "hr": 65,
  "avg": 0.278,
  "rbi": 147
}
映射到序列
attributes:
  - a1
  - a2
methods: [getter, setter]
↓ 等效的 JSON
{
  "attributes": ["a1", "a2"],
  "methods": ["getter", "setter"]
}
映射序列
children:
  - name: Jimmy Smith
    age: 15
  - name: Jimmy Smith
    age: 15
  -
    name: Sammy Sosa
    age: 12
↓ 等效的 JSON
{
  "children": [
    {"name": "Jimmy Smith", "age": 15},
    {"name": "Jimmy Smith", "age": 15},
    {"name": "Sammy Sosa", "age": 12}
  ]
}
序列的序列
my_sequences:
  - [1, 2, 3]
  - [4, 5, 6]
  -
    - 7
    - 8
    - 9
    - 0
↓ 等效的 JSON
{
  "my_sequences": [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9, 0]
  ]
}
映射的映射
Mark McGwire: {hr: 65, avg: 0.278}
Sammy Sosa: {
    hr: 63,
    avg: 0.288
  }
↓ 等效的 JSON
{
  "Mark McGwire": {
    "hr": 65,
    "avg": 0.278
  },
  "Sammy Sosa": {
    "hr": 63,
    "avg": 0.288
  }
}
嵌套集合
Jack:
  id: 1
  name: Franc
  salary: 25000
  hobby:
    - a
    - b
  location: {country: "A", city: "A-A"}
↓ 等效的 JSON
{
  "Jack": {
    "id": 1,
    "name": "Franc",
    "salary": 25000,
    "hobby": ["a", "b"],
    "location": {
        "country": "A", "city": "A-A"
    }
  }
}
无序集
set1: !!set
  ? one
  ? two
set2: !!set {'one', "two"}
↓ 等效的 JSON
{
  "set1": {"one": null, "two": null},
  "set2": {"one": null, "two": null}
}
集合表示为一个映射,其中每个键都与一个空值相关联
有序映射
ordered: !!omap
- Mark McGwire: 65
- Sammy Sosa: 63
- Ken Griffy: 58
↓ 等效的 JSON
{
  "ordered": [
     {"Mark McGwire": 65},
     {"Sammy Sosa": 63},
     {"Ken Griffy": 58}
  ]
}
YAML 参考
条款
- 序列又名数组或列表
- 标量又名字符串或数字
- 映射又名哈希或字典
基于 YAML.org refcard。
文档指标
| :- | :- | 
|---|---|
| % | 指令指标 | 
| --- | 文档标题 | 
| ... | 文档终结者 | 
收集指标
| :- | :- | 
|---|---|
| ? | 关键指标 | 
| : | 价值指标 | 
| - | 嵌套系列条目指示器 | 
| , | 单独的内联分支条目 | 
| [] | 环绕串联系列分支 | 
| {} | 环绕在线键控分支 | 
别名指标
| :- | :- | 
|---|---|
| & | 锚属性 | 
| * | 别名指示符 | 
特殊键
| :- | :- | 
|---|---|
| = | 默认“值”映射键 | 
| << | 合并来自另一个映射的键 | 
标量指标
| :- | :- | 
|---|---|
| '' | 环绕内联未转义标量 | 
| " | 环绕内嵌转义标量 | 
| ` | ` | 
| > | 折叠标量指示器 | 
| - | 剥离 chomp 修饰符( |-或>-) | 
| + | 保留 chomp 修饰符( |+或>+) | 
| 1-9 | 显式缩进修饰符( |1或>2)。修饰符可以组合( |2-,>+1) | 
标签属性(通常未指定)
| :- | :- | 
|---|---|
| none | 未指定的标签(由应用程序自动解析) | 
| ! | 非特定标签(默认情况下, !!map/!!seq/!!str) | 
| !foo | 主要(按照惯例,表示本地 !foo标记) | 
| !!foo | 次要的(按照惯例,表示 tag:yaml.org,2002:foo) | 
| !h!foo | 需要 %TAG !h! <prefix>(然后表示<prefix>foo) | 
| !<foo> | 逐字标记(始终表示“foo”) | 
杂项指标
| # | 一次性评论指示器 | 
| `@ | 两者都保留供将来使用 | 
核心类型(默认自动标签)
| !!map | {Hash table, dictionary, mapping} | 
| !!seq | {List, array, tuple, vector, sequence} | 
| !!str | Unicode 字符串 | 
转义码
Numeric
- \x12(8-bit)
- \u1234(16-bit)
- \U00102030(32-bit)
Protective
- \\(\)
- \"(")
- \( )
- \<TAB>(TAB)
C
- \0(NUL)
- \a(BEL)
- \b(BS)
- \f(FF)
- \n(LF)
- \r(CR)
- \t(TAB)
- \v(VTAB)
额外的
- \e(ESC)
- \_(NBSP)
- \N(NEL)
- \L(LS)
- \P(PS)
更多类型
| !!set | {cherries, plums, apples} | 
| !!omap | [one: 1, two: 2] | 
与语言无关的标量类型
| {~, null} | 空(无值)。 | 
| [1234, 0x4D2, 02333] | [十进制整数、十六进制整数、八进制整数] | 
| [1_230.15, 12.3015e+02] | [固定浮点数,指数浮点数] | 
| [.inf, -.Inf, .NAN] | [无穷大(浮点数),负数,不是数字] | 
| {Y, true, Yes, ON} | 布尔真 | 
| {n, FALSE, No, off} | 布尔假 | 
另见
- YAML Reference Card (yaml.org)
- Learn X in Y minutes (learnxinyminutes.com)
- YAML lint online (yamllint.com)
- INI 格式配置文件速查表 (jaywcjlove.github.io)
- TOML 格式配置文件速查表 (jaywcjlove.github.io)
                声明 定期同步开源项目
    reference
            
        评论
欢迎提交文档错误或者建议。提交成功后自己可见,其他用户待审核通过后才可见。
            您暂未登录
            
    
                必须登录后才能使用评论功能(评论、点赞、回复、删除等),请
    点击跳转登录
。首次评论仅自己可见,待管理员审核通过后,才会对外发布。