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字符)。