什么是YAML

YAML是“YAML不是一种标记语言”但为了强调这种语言以数据做为中心,而不是以置标语言为重点,而用返璞词重新命名。它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。

它是类似于标准通用标记语言的子集XML的数据描述语言,语法比XML简单很多。

一、注释和多文件

使用#作为注释,YAML中只有行注释。

多个文件可以用---表示


apiVersion: v1 #这是一个注释

二、格式要求

  1. 大小写敏感
  2. 使用缩进表示层级关系
  3. 缩进时不允许使用Tab键,只允许使用空格
  4. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可一般是2个或者4个空格

三、数据结构

  1. 对象:键值对的集合
  2. 数组:一组按次序排列的值
  3. 常量:单个的、不可再分的值

1.对象

对象的一组键值对,使用冒号:结构表示

使用冒号代表,格式为key: value。冒号后面要加一个空格

args:
apiVersion: v1
kind: Pod

也可以把多个键值对写到一行

args: {apiVersion: v1,kind: Pod}

JSON格式就是

{args:{apiVersion:'v1',kind:'Pod'}}

2. 数组

使用一个短横线加一个空格代表一个数组项

language:
- C#
- JAVA

也可以写到单行里

languge: [C#, JAVA]

JSON格式就是:

{languge:['C#, 'JAVA']}

3.常量

量是最基本的、不可再分的值。

  • 布尔值
  • 整数
  • 浮点数
  • 字符串
  • Null
  • 日期
  • 时间
boolean:
- TRUE #true,True都可以
- FALSE #false,False都可以
int:
- 123
- 0b1010_0111_0100_1010_1110 #二进制表示
float:
- 3.14
- 6.8523015e+5 #可以使用科学计数法
string:
- 哈哈
- 'Hello world' #可以使用双引号或者单引号包裹特殊字符
- newline
newline2 #字符串可以拆成多行,每一行会被转化成一个空格
null:
nodeName: 'node'
parent: ~ #使用~表示null
date:
- 2018-02-17 #日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime:
- 2018-02-17T15:02:31+08:00 #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区

四、字符串

字符串默认不使用引号表示

单引号和双引号都可以使用

双引号不会对特殊字符转义

字符串中需要单引号,需要两个单引号表示

str: 这是一行字符串
s1: '内容\n字符串'
s2: "内容\n字符串"
s3: 'this ''s my life'

JSON格式为:

{
str:'这是一行字符串'
, s1: '内容\\n字符串'
, s2: '内容\n字符串'
, s3: 'this \'s my life'
}

字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格。

str: 这是一段
多行
字符串

JSON

{ str: '这是一段 多行 字符串' }

多行字符串可以使用|保留换行符,也可以使用>折叠换行。

this: |
Foo
Bar
that: >
Foo
Bar

JSON

{ this: 'Foo\nBar\n', that: 'Foo Bar\n' }

+表示保留文字块末尾的换行,-表示删除字符串末尾的换行。

s1: |
Foo s2: |+
Foo s3: |-
Foo

JSON

{ s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' }

YAML的特殊字符

--- YAML可以在同一个文件中,使用---表示一个文档的开始, ... 表示文件的结束

---
time: 20:03:20
player: Sammy Sosa
action: strike (miss)
...
---
time: 20:03:47
player: Sammy Sosa
action: grand slam
...

!! YAML中使用!!做类型强行转换

string:
- !!str 54321
- !!str true

JSON:

{string: ['54321', 'true']}
--- !!set
- Mark McGwire: 65
- Sammy Sosa: 63
- Sammy Sosa: 63
- Ken Griffy: 58

JSON:

[{Ken Griffy=58}, {Mark McGwire=65}, {Sammy Sosa=63}],重复的Sammy Sosa去掉

引用。重复的内容在YAML中可以使用&来完成锚点定义,使用*来完成锚点引用

hr:
- Mark McGwire
- &SS Sammy Sosa
rbi:
- *SS
- Ken Griffey JSON:
{rbi=[Sammy Sosa, Ken Griffey], hr=[Mark McGwire, Sammy Sosa]}

也可以这样定义:

SS: &SS Sammy Sosa
hr:
- Mark McGwire
- *SS
rbi:
- *SS
- Ken Griffey

合并内容:用<<表示,主要和锚点配合使用,可以将一个锚点内容直接合并到一个对象中

merge:
- &CENTER { x: 1, y: 2 }
- &LEFT { x: 0, y: 2 }
- &BIG { r: 10 }
- &SMALL { r: 1 } sample1:
<<: *CENTER
r: 10 sample2:
<< : [ *CENTER, *BIG ]
other: haha sample3:
<< : [ *CENTER, *BIG ]
r: 100

在merge中,定义了四个锚点,分别在sample中使用。

sample1中,<<: *CENTER意思是引用{x: 1,y: 2},并且合并到sample1中,那么合并的结果为:sample1={r=10, y=2, x=1}

sample2中,<<: [*CENTER, *BIG] 意思是联合引用{x: 1,y: 2}和{r: 10},并且合并到sample2中,那么合并的结果为:sample2={other=haha, x=1, y=2, r=10}

sample3中,引入了*CENTER, *BIG,还使用了r: 100覆盖了引入的r: 10,所以sample3值为:sample3={r=100, y=2, x=1}

有了合并,我们就可以在配置中,把相同的基础配置抽取出来,在不同的子配置中合并引用即可。

最新文章

  1. 在ASP.NET中如何运行后台任务
  2. lodop打印控件一点记录
  3. 新建web工程Jdk怎么不是自己安装的, 是自带的
  4. LintCode Search For a Range (Binary Search)
  5. 配置Git自动补全功能
  6. Codeforces 540D Bad Luck Island - 概率+记忆化搜索
  7. poj2389---大数乘法
  8. nodejs中使用monk訪问mongodb
  9. StackExchange.Redis学习笔记(四) 事务控制和Batch批量操作
  10. 谈谈关键字new
  11. vue 动态样式
  12. TCP/IP详解--TCP连接中TIME_WAIT状态过多
  13. 类的调用1(被调用的MyFirstJava)
  14. 两个App之间的跳转 并传值
  15. WPF 4 Ribbon 开发 之 快捷工具栏(Quick Access Toolbar)
  16. element 表格元素 超链接
  17. 【kafka】kafka.admin.AdminOperationException: replication factor: 1 larger than available brokers: 0
  18. virtualbox+vagrant学习-2(command cli)-11-vagrant PowerShell命令
  19. POJ3233_Matrix Power Series_矩阵幂_C++
  20. sql server 2008 r2 产品密钥

热门文章

  1. C#异步编程之基于任务的异步模式
  2. Mysql 忘记密码----修改Navicat的连接密码--以及--(加入安装Navicat时没设置密码)有时新建连接设置密码,连接不成功---的问题解决方法
  3. kafka producer参数详解
  4. vue中使用对非表单元素使用contenteditable的问题
  5. Java基础19-封装、方法重载、构造方法(构造函数)
  6. windows 系统 python3.5安装 lxml 库
  7. JAVA 中 if和while的区别
  8. 在 Visual Studio 中调试 XAML 设计时异常
  9. .NET Core 部署到CentOS&ndash;1.创建项目,简单部署
  10. 文件读取工具类读取properties文件