作者:追梦1819
原文: 版权声明:本文为博主原创文章,转载请附上博文链接!前言
本文主要讲 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: '内容\n字符串' # 单引号和双引号都可以使用,双引号不会对特殊字符转义str4: "内容\n字符串" # 双引号对特殊字符不转义str5: 'labor''s day' # 单引号之中如果还有单引号,需要使用单引号转义# 多行字符串(# 多行字符串(从第二行开始,必须有一个单空格缩进,换行符会被转为空格)str6: 这是一段 多行 字符串str7: | # "|"表示每行末尾都跟一个换行符 Foo Barstr8: > # “>” 最后一行跟一个换行符 Foo Barstr9: | Foostr10: |+ # +表示保留文字块末尾的换行 Foostr11: |- # -表示删除字符串末尾的换行 Foostr12: | # 字符串之中可以插入 HTML 标记
段落
类型转换
使用两个感叹号跟要转换的基本数据类型,单引号:用于转换自定义对象。
#下面是内置类型#!!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 官网:
- yaml 在线校验:
- 源码:
本系列文章同步于公众号:【技术与人生】