作者:追梦1819
原文:https://www.cnblogs.com/yanfei1819/p/10615605.html
版权声明:本文为博主原创文章,转载请附上博文链接!
## 前言
本文主要讲 yaml 文件。
传统的配置文件有 .xml、.properties、.json 等格式的文件。yaml 文件想对于传统的文件来说,减少很多不必要的标签或者括号,阅读也更加清晰简单。SpringBoot 官方推荐的配置文件,除了 .properties ,还有 yaml 。
概述
yaml 文件其实与properties 文件差别不大,主要是层次结构更加明显,阅读性更强。
以下是百度百科的解释:
YAML 是 YAML 不是一种标记语言的外语缩写;但为了强调这种语言以数据做为中心,而不是以置标语言为重点,而用返璞词重新命名。它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。
它是类似于标准通用标记语言的子集XML的数据描述语言,语法比XML简单很多。
语法
- 大小写敏感;
- 使用缩进表示层级关系;
- 禁止使用
tab
缩进,只能使用空格键 , 建议使用两个空格; - 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可;
- # 表示注释,从这个字符一直到行尾,都会被解析器忽略;
- 字符串可以不用引号,也可以使用单引号或者双引号。
数据结构
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
- 纯量(scalars):单个的、不可再分的值
实例
注意:
- 使用冒号:表示键值对, 冒号后面需要有一个空格, key需要顶格写,前面不能有空格 同一缩进的所有键值对属于一个map;
- 在一个文件中,可同时包含多个文件,并"---"分隔;
- 选择性的符号"..."可以用来表示文件结尾.
-
对象:
单个值:
name: demo
对象:
person: name: yaml age: 23
或者为:
person: {name: 'yaml', age: 26}
-
数组
fruit: - apple - orange
fruit: ['apple', 'orange']
teacher: - studentA - studentB - - bookA - bookB
等同:
teacher: ['studentA', 'studentB',['bookA', 'bookB']]
注意:
当键是数组或者对象时需要使用问号来标记
?[blue, reg, green]: xxx ?{a:xx, b:xx}: xx
-
复合结构
数据和对象可以组合使用。
-
纯量
纯量是最基本的、不可再分的值。
-
字符串
-
布尔值
-
整数
-
浮点数
-
Null
-
时间
-
日期
-
-
字符串
字符串是最常用的,也是比较复杂的数据类型。以下细细分析。
# 单行字符串 str: 这是一行字符串 # 字符串默认不使用引号表示 str2: '内容: 字符串' # 如果字符串之中包含空格或特殊字符,需要放在引号之中 str3: '内容 字符串' # 单引号和双引号都可以使用,双引号不会对特殊字符转义 str4: "内容 字符串" # 双引号对特殊字符不转义 str5: 'labor''s day' # 单引号之中如果还有单引号,需要使用单引号转义 # 多行字符串(# 多行字符串(从第二行开始,必须有一个单空格缩进,换行符会被转为空格) str6: 这是一段 多行 字符串 str7: | # "|"表示每行末尾都跟一个换行符 Foo Bar str8: > # “>” 最后一行跟一个换行符 Foo Bar str9: | Foo str10: |+ # +表示保留文字块末尾的换行 Foo str11: |- # -表示删除字符串末尾的换行 Foo str12: | # 字符串之中可以插入 HTML 标记 <p style="color: red"> 段落 </p>
-
类型转换
使用两个感叹号跟要转换的基本数据类型,单引号:用于转换自定义对象。
#下面是内置类型 #!!int # 整数类型 #!!float # 浮点类型 #!!bool # 布尔类型 #!!str # 字符串类型 #!!binary # 也是字符串类型 #!!timestamp # 日期时间类型 #!!null # 空值 #!!set # 集合 #!!omap, !!pairs # 键值列表或对象列表 #!!seq # 序列,也是列表 #!!map # 键值表 test: !!str 123
-
锚点和引用
锚点
&
和别名*
,可以用来引用。- &index1 a - b - *index1
数据类型约定
对一些常用数据类型的表示格式进行了约定,包括:
integer: 12345 # 整数标准形式
octal: 0o34 # 八进制表示,第二个是字母 o
hex: 0xFF # 十六进制表示
float: 1.23e+3 # 浮点数
fixed: 13.67 # 固定小数
minmin: -.inf # 表示负无穷
notNumber: .NaN # 无效数字
null: # 空值
boolean: [true, false] # 布尔值
string: '12345's # 字符串
date: 2015-08-23 # 日期
datetime: 2015-08-23T02:02:00.1z # 日期时间
iso8601: 2015-08-23t21:59:43.10-05:00 # iso8601 日期格式
spaced: 2015-08-23 21:59:43.10 -5 # ?
“!”(叹号)显式指示类型,或自定义类型标识。单叹号通常是自定义类型,双叹号是内置类型
isString: !!str 2015-08-23 # 强调是字符串不是日期数据
picture: !!binary | # Base64 图片
R0lGODlhDAAMAIQAAP//9/X
17unp5WZmZgAAAOfn515eXv
Pz7Y6OjuDg4J+fn5OTk6enp
56enmleECcgggoBADs=
#下面是内置类型
!!int # 整数类型
!!float # 浮点类型
!!bool # 布尔类型
!!str # 字符串类型
!!binary # 也是字符串类型
!!timestamp # 日期时间类型
!!null # 空值
!!set # 集合
!!omap, !!pairs # 键值列表或对象列表
!!seq # 序列,也是列表
!!map # 键值表
#下面是一些例子:
--- !!omap
- Mark: 65
- Sammy: 63
- Key: 58
--- !!set # 注意,“?”表示键为列表,在这里列表为 null
? Mark
? Sammy
? Key
# 下面是自定义的类型或标识
%TAG ! tag:clarkevans.com,2002: # % 是指令符号
--- !shape
# Use the ! handle for presenting
# tag:clarkevans.com,2002:circle
- !circle
center: &ORIGIN {x: 73, y: 129}
radius: 7
- !line
start: *ORIGIN
finish: { x: 89, y: 102 }
- !label
start: *ORIGIN
color: 0xFFEEBB
text: Pretty vector drawing.
参考
- yaml 官网:https://yaml.org/spec/1.2/spec.html
- yaml 在线校验:http://www.bejson.com/validators/yaml/
- 源码:我的GitHub
<全文完>
本系列文章同步于公众号:【技术与人生】