1、YML简介
YML的定位不是要成为一种标记语言,而是要成为一种高级语言,所以YML参考了其他多种语言,包括:C语言、Python、Perl等。
作为一门高级语言,数据类型是基石,YML也不例外。YML具有轻量化的语法与数据类型,如字符串、布尔型、浮点型或整数型等。
2、YML基本语法
(1)k: v 表示键值对关系,冒号后面必须有一个空格。
(2)使用空格的缩进表示层级关系,空格数目不重要,只要是左对齐的一列数据,都是同一个层级的。
(3)大小写敏感。
(4)缩进时不允许使用Tab键,只允许使用空格。
(5)松散表示,Java中对于驼峰命名法,可用原名或使用-代替驼峰,如Java中的lastName属性,在yml中使用lastName或last-name都可正确映射。
3、YML键值关系
(1) 普通值(字面量)
k: v 形式的字面量直接写即可,如下所示:
name1: Tom
name2: 'Tom \\n Sam'
name3: "Tom \\n Sam"
age: 18
flag: true
另外,对于字符串而言,字符串默认不用加上单引号或者双引号,但是如果加上单引号或者双引号,则需要注意两者之间的区别,如下所示:
双引号:不会转义字符串里面的特殊字符,特殊字符会作为本身想表示的意思。例如:name: "Tom \\n Sam" 则输出:Tom 换行 Sam
单引号:会转义特殊字符,特殊字符最终只是一个普通的字符串数据。
(2)日期
date: 2019/01/01
(3)对象(属性和值)、Map(键值对)
需要另起一行写下对象的属性和值的关系,要注意缩进,如下所示:
people:
name: Tom
age: 20
行内写法:
people: {name:Tom,age: 20}
(4)数组、list、set
用- 值表示数组中的一个元素。
pets:
- dog
- pig
- cat
行内写法
pets: [dog,pig,cat]
(5)数组对象、list对象、set对象
peoples:
- name: Tom
age: 22
- name: Sam
age: 20
- {name: wangwu,age: 18}
(6)Java代码示例
Java代码(省略get,set方法)
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Dog> lists;
private Dog dog;
private String[] arr;
}
public class Dog {
private String name;
private Integer age;
}
对应的yml
person:
boss: false
maps:
k1: v1
k2: 14
lists:
- name: d1
age: 1
- name: d2
age: 2
- {name: d3,age: 3}
birth: 2017/12/15
dog:
name: dog
age: 15
age: 13
last-name: Tom
arr: [s1,s2,s3]
文档块
对于测试环境,预生产环境,生产环境可以使用不同的配置,如果只想写到一个文件中,yml与是支持的,每个块用----隔开
server:
port: 8081
spring:
profiles:
active: prod #激活对应的文档块
---
server:
port: 8083
spring:
profiles: dev #指定属于哪个环境
---
server:
port: 8084
spring:
profiles: prod #指定属于哪个环境
总结
注意,在YAML中,字符串不一定要用双引号标示。另外,在缩进中空白字符的数目并不是非常重要,只要相同层次结构的元素左侧对齐就可以了(不过不能使用TAB字符)。