这是理解和编写 YAML 格式配置文件的快速参考备忘单。

入门

介绍

YAML 是一种数据序列化语言,旨在供人类直接读写

  • YAML 不允许使用制表符
  • 元素部分之间必须有空间
  • YAML 区分大小写
  • .yaml.yml 扩展名结束您的 YAML 文件
  • YAML 是 JSON 的超集
  • Ansible playbook 是 YAML 文件

标量类型

1
2
3
4
5
6
7
n1: 1            # 整数
n2: 1.234 # 浮点
s1: 'abc' # 字符串
s2: "abc" # 字符串
s3: abc # 字符串
b: false # 布尔类型
d: 2015-04-05 # 日期类型

↓ 等效的 JSON

1
2
3
4
5
6
7
8
9
{
"n1": 1,
"n2": 1.234,
"s1": "abc",
"s2": "abc",
"s3": "abc",
"b": false,
"d": "2015-04-05"
}

使用空格缩进。 元素部分之间必须有空间。

变量

1
2
some_thing: &VAR_NAME foobar
other_thing: *VAR_NAME

↓ 等效的 JSON

1
2
3
4
{
"some_thing": "foobar",
"other_thing": "foobar"
}

注释

1
2
3
4
5
# A single line comment example
# block level comment example
# comment line 1
# comment line 2
# comment line 3

多行字符串

1
2
3
description: |
hello
world

↓ 等效的 JSON

1
{"description": "hello\nworld\n"}

继承

1
2
3
4
5
6
parent: &defaults
a: 2
b: 3
child:
<<: *defaults
b: 4

↓ 等效的 JSON

1
2
3
4
5
6
7
8
9
10
{
"parent": {
"a": 2,
"b": 3
},
"child": {
"a": 2,
"b": 4
}
}

参考

1
2
3
4
5
6
values: &ref
- Will be
- reused below

other_values:
i_am_ref: *ref

↓ 等效的 JSON

1
2
3
4
5
6
7
8
9
10
11
12
{
"values": [
"Will be",
"reused below"
],
"other_values": {
"i_am_ref": [
"Will be",
"reused below"
]
}
}

折叠的字符串

1
2
3
description: >
hello
world

↓ 等效的 JSON

1
{"description": "hello world\n"}

两份文件

1
2
3
4
---
document: this is doc 1
---
document: this is doc 2

YAML使用---将指令与文档内容分开。

YAML Collections

序列

1
2
3
- Mark McGwire
- Sammy Sosa
- Ken Griffey

↓ 等效的 JSON

1
2
3
4
5
[
"Mark McGwire",
"Sammy Sosa",
"Ken Griffey"
]

映射

1
2
3
hr:  65       # Home runs
avg: 0.278 # Batting average
rbi: 147 # Runs Batted In

↓ 等效的 JSON

1
2
3
4
5
{
"hr": 65,
"avg": 0.278,
"rbi": 147
}

映射到序列

1
2
3
4
attributes:
- a1
- a2
methods: [getter, setter]

↓ 等效的 JSON

1
2
3
4
{
"attributes": ["a1", "a2"],
"methods": ["getter", "setter"]
}

映射序列

1
2
3
4
5
6
7
8
children:
- name: Jimmy Smith
age: 15
- name: Jimmy Smith
age: 15
-
name: Sammy Sosa
age: 12

↓ 等效的 JSON

1
2
3
4
5
6
7
{
"children": [
{"name": "Jimmy Smith", "age": 15},
{"name": "Jimmy Smith", "age": 15},
{"name": "Sammy Sosa", "age": 12}
]
}

序列的序列

1
2
3
4
5
6
7
8
my_sequences:
- [1, 2, 3]
- [4, 5, 6]
-
- 7
- 8
- 9
- 0

↓ 等效的 JSON

1
2
3
4
5
6
7
{
"my_sequences": [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9, 0]
]
}

映射的映射

1
2
3
4
5
Mark McGwire: {hr: 65, avg: 0.278}
Sammy Sosa: {
hr: 63,
avg: 0.288
}

↓ 等效的 JSON

1
2
3
4
5
6
7
8
9
10
{
"Mark McGwire": {
"hr": 65,
"avg": 0.278
},
"Sammy Sosa": {
"hr": 63,
"avg": 0.288
}
}

嵌套集合

1
2
3
4
5
6
7
8
Jack:
id: 1
name: Franc
salary: 25000
hobby:
- a
- b
location: {country: "A", city: "A-A"}

↓ 等效的 JSON

1
2
3
4
5
6
7
8
9
10
11
{
"Jack": {
"id": 1,
"name": "Franc",
"salary": 25000,
"hobby": ["a", "b"],
"location": {
"country": "A", "city": "A-A"
}
}
}

无序集

1
2
3
4
set1: !!set
? one
? two
set2: !!set {'one', "two"}

↓ 等效的 JSON

1
2
3
4
{
"set1": {"one": null, "two": null},
"set2": {"one": null, "two": null}
}

集合表示为一个映射,其中每个键都与一个空值相关联

有序映射

1
2
3
4
ordered: !!omap
- Mark McGwire: 65
- Sammy Sosa: 63
- Ken Griffy: 58

↓ 等效的 JSON

1
2
3
4
5
6
7
{
"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} 布尔假

另见


评论
avatar
竹山一叶
技术分享 个人心得
Follow Me
公告
欢迎光临小站,这里是我日常工作和学习中收集和整理的总结,希望能对你有所帮助:)

本站的内容经过个人加工总结而来,也参考了网友们分享的资料,如有侵权,请第一时间联系我,我将及时进行修改或删除😊
最新文章
网站资讯
文章数目 :
436
已运行时间 :
本站总字数 :
431.5k
本站访客数 :
本站总访问量 :
最后更新时间 :
文章归档文章分类文章标签复制本文标题复制本文地址
随便逛逛