YAML 基础
YAML 基础
- 简介
- 对象
- 数组
- 常量
- 引用
1. 简介
YAML 是专门用来写配置文件的语言,非常简洁和强大!
它的基本语法规则有:
- 大小写敏感;
- 使用缩进表示层级关系;
- 缩进时不允许使用 Tab 键,只允许使用空格;
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可;
YAML 中使用 # 作为注释, Yaml 中只有行注释。
YAML 支持的数据结构有三种:
- 对象: 键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary);
- 数组: 一组按次序排列的值,又称为序列(sequence) / 列表(list);
- 常量:单个的,不可再分的值;
2. YAML 对象
对象的一组键值对,使用冒号结构表示,格式为 key: value,冒号后面要加空格。
animal: pets
同时,YAML 也允许另一种写法,即将所有键值对写成一个行内对象。
hash: { name: dog, age: 1}
可以使用缩进来表示层级关系,如:
key:
value: dog
age: 24
properties 相当于 key.value = dog, key.age = 24 。
3. 数组
一组连词线开头的行,构成一个数组。
lover:
- Cat
- Dog
-
- Cat
- Dog
- Goldfish
properties 相当于 lover = [ Cat, Dog] , [ [Cat, Dog, Goldfish] ]。
相对复杂的例子,如:
companies:
-
id: 1
name: company1
price: 200W
-
id: 2
name: company2
price: 500W
表示,companies 属性是一个数组,每一个数组元素由 id, name, price 三个属性构成。
使用流式的方式表示,即为:
companies: [{id: 1,name: company1,price: 200W},{id: 2,name: company2,price: 500W}]
4. 常量
常量是最基本的、不可再分的值。以下数据类型都属于 Yaml 的常量:
- 整数
- 浮点数
- 字符串
- NULL
- 日期
- 布尔
- 时间
boolean:
- TRUE #true,True都可以
- FALSE #false,False都可以
float:
- 3.14
- 6.8523015e+5 #可以使用科学计数法
int:
- 123
- 0b1010_0111_0100_1010_1110 #二进制表示
null:
nodeName: 'node'
parent: ~ #使用~表示null
string:
- 哈哈
- 'Hello world' #可以使用双引号或者单引号包裹特殊字符
- newline
newline2 #字符串可以拆成多行,每一行会被转化成一个空格
date:
- 2018-02-17 #日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime:
- 2018-02-17T15:02:31+08:00 #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
关于常量中的字符串要注意的是:
- 字符串默认不使用引号表示;
- 如果字符串之中包含空格或特殊字符,需要放在引号之中;
- 单引号和双引号都可以使用,双引号不会对特殊字符转义;
- 单引号之中如果还有单引号,必须连续使用两个单引号转义;
- 多行字符串可以使用 | 保留换行符,也可以使用 > 折叠换行:
this: |
Foo
Bar
that: >
Foo
Bar
属性转换为: { this: 'Foo\nBar\n', that: 'Foo Bar\n' } 。
5. 引用
重复的内容在 YAML 中可以使用 & 来完成锚点定义,使用 * 来完成锚点引用,例如:
hr:
- Mark McGwire
- &SS Sammy Sosa
rbi:
- *SS
- Ken Griffey
在 hr 中,使用 &SS 为 Sammy Sosa 设置了一个锚点(引用),名称为 SS,在 rbi 中,使用 *SS 引用了该锚点,那么结果为:
{rbi=[Sammy Sosa, Ken Griffey], hr=[Mark McGwire, Sammy Sosa]}
也可定义成如下结构:
SS: &SS Sammy Sosa
hr:
- Mark McGwire
- *SS
rbi:
- *SS
- Ken Griffey
注意,不能独立的定义锚点,比如不能直接这样写: &SS Sammy Sosa;另外,锚点能够定义更复杂的内容,比如:
default: &default
- Mark McGwire
- Sammy Sosa
hr: *default
hr 相当于引用了 default 的数组,注意,hr: *default 要写在同一行。
合并锚点可以将一个锚点内容直接合并到一个对象中,如:
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} 。
再举一例:
defaults: &defaults
adapter: postgres
host: localhost development:
database: myapp_development
<<: *defaults test:
database: myapp_test
<<: *defaults
相当于:
defaults:
adapter: postgres
host: localhost development:
database: myapp_development
adapter: postgres
host: localhost test:
database: myapp_test
adapter: postgres
host: localhost
& 用来建立锚点 (defaults),<< 表示合并到当前数据,* 用来引用锚点。
有了合并锚点,就可以在配置中,把相同的基础配置抽取出来,在不同的子配置中加以合并引用。
参考文章:
YAML 1.2 官网教程: https://yaml.org/spec/1.2/spec.html
YAML 基础的更多相关文章
- YAML基础知识及搭建一台简洁版guestbook
一,前言 前面我们已经搭建过简易版k8s集群了,在此基础上可以搭建一个简洁版guestbook ,以便来学习k8s创建pod的整个过程. 二,在此之前,我们还需要学习一下YAML基础知识 YAML 基 ...
- springboot的yaml基础语法与取值,配置类,配置文件加载优先级
1.基本语法k:(空格)v:表示一对键值对(一个空格必须有):以空格的缩进来控制层级关系:只要是左对齐的一列数据,都是同一个层级的属性和值也是大小写敏感: server: port: 8081 pat ...
- YAML基础教程
一.YAML介绍YAML参考了其他多种语言,包括:XML.C语言.Python.Perl以及电子邮件格式RFC2822.Clark Evans在2001年5月在首次发表了这种语言,另外Ingy döt ...
- YAML基础语法
正如YAML所表示的YAML Ain’t Markup Language,YAML 是一种简洁的非标记语言.YAML以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读. 一边学习规则 ...
- [Kubernetes]yaml文件详解
应前一段时间夸下的海口:[Kubernetes]如何使用yaml文件使得可以向外暴露服务,说过要写一篇关于yaml文件详解的文章出来的,今天来总结一下.yaml文件用在很多地方,但是这里以介绍在Kub ...
- Kubernetes之YAML文件
一.YAML 基础 YAML是专门用来写配置文件的语言,非常简洁和强大,使用比json更方便.它实质上是一种通用的数据串行化格式.后文会说明定义YAML文件创建Pod和创建Deployment. YA ...
- yaml中的锚点和引用
项目引入yaml语言来写配置文件,最近发现利用其锚点&和引用*的功能,可以极大减少配置文件中的重复内容,将相同配置内容收敛到锚点处,修改时,只需要修改锚点处的内容,即可在所有引用处生效. ya ...
- 碰到的一个新的东西——yaml,果然是个好东西
yaml 基础语法可以看阮一峰大大的博客[yaml 语言教程] 看过了 xml 和 json之后,看一眼这个 yaml,觉得少写了好多东西,不用再去找层级关系了, yaml 直接一目了然,没有了尖括号 ...
- python之读取yaml数据
一.yaml简介 yaml:一种标记语言,专门用来写配置文件. 二.yaml基础语法 区分大小写: 使用缩进表示层级关系: 使用空格键缩进,而非Tab键缩进 缩进的空格数目不固定,只需要相同层级的元素 ...
随机推荐
- EF Core 2.1 Raw SQL Queries (转自MSDN)
Entity Framework Core allows you to drop down to raw SQL queries when working with a relational data ...
- 设计模式 - 抽象工厂模式(abstract factory pattern) 具体解释
抽象工厂模式(abstract factory pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/2709 ...
- 分享cropper剪切单张图片demo
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...
- CSS网页布局:盒子模型
一.盒子模型 标准盒子模型(W3C盒子) 不论是标准盒模型还是IE盒子模型,都有content.padding.border.margin四个部分组成,但从上图也可以看出W3C盒子和IE盒子主要区别在 ...
- misc类设备
何为misc (1)中文名:杂项设备\杂散设备,它是一种典型的字符设,在一般情况下在内核中,所有的misc设备的主设备号是固定的,为10,它们的次设备号不一样:(2)可以在根文件系统中看到:/sys/ ...
- TestNG+Maven+IDEA 自动化测试(一) 环境搭建
示例代码: https://github.com/ryan255/TestNG-Demo 所需环境: 1. IDEA UItimate 2. JDK 3. Maven 创建工程 一开始创建一个普通的m ...
- iOS 后台持续定位详解(支持ISO9.0以上)
iOS 后台持续定位详解(支持ISO9.0以上) #import <CoreLocation/CoreLocation.h>并实现CLLocationManagerDelegate 代理, ...
- 一个input输入内容监听联动的demo
两个input,一个在其中一个输入,内容在另一个input中实时回显 代码如下 <!DOCTYPE html> <html> <head> <title> ...
- 傻瓜式搭建php+nginx+mysql服务器环境
1.安装nginx 1.安装yum源 rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0. ...
- py基础---多线程、多进程、协程
目录 Python基础__线程.进程.协程 1.什么是线程(thread)? 2.什么是进程(process)? 3.进程和线程的区别 4.GIL全局解释器锁 5.多线程(threading模块) 6 ...