YAML(YAML Ain't Markup Language)是一种标记语言,通常以.yml或者.yaml为后缀的文件。它是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的。YAML可以用于如Java,C/C++, Ruby, Python, Perl, C#, PHP等编程语言。
在Java中,可以通过支持YAML的库(如SnakeYAML,Jackson YAML等)将YAML文件解析为Java对象,或者将Java对象序列化为YAML文件。这对于配置文件,数据传输,对象序列化等场景非常有用。
YAML的基本语法规则如下:
(以Java语言为例,其它语言类似)对于键与值主要是看能否表示以下内容。普通的值(数字、字符串、布尔)、日期、对象、数组、集合等。
k: v:字面量直接写;
字符串默认不用加上单引号或者双绰号;
“”: 双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi
‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
age: 25
name: "John Doe"
is_alive: true
date: 2023/08/30
在下一行来写对象的属性和值的关系,注意缩进
address:
city: Anytown
state: CA
zip: 12345
行内写法:
address:{city: Anytown,state: CA,zip: 12345}
用- 值表示数组中的一个元素
fruits:
- apple
- banana
- orange
行内写法:
fruits:{apple,banana,orange}
peoples:
- name: zhangsan
age: 22
- name: lisi
age: 20
- {name: wangwu,age: 18}
public class Person {
private String name;
private int age;
private List hobbies;
public Person(String name, int age, List hobbies) {
this.name = name;
this.age = age;
this.hobbies = hobbies;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List getHobbies() {
return hobbies;
}
public void setHobbies(List hobbies) {
this.hobbies = hobbies;
}
}
对应的YAML配置文件:
Person:
name: John Doe
age: 25
hobbies: [reading, sports, music]
在这个例子中,Java代码定义了一个名为Person的类,它有三个属性:name、age和hobbies。name是一个字符串,age是一个整数,hobbies是一个字符串列表。对应的YAML配置文件将Person对象的属性设置为指定的值。
在YAML中,文档块(document block)是一种将多个键值对组合在一起的数据结构。文档块以---(三个连字符)作为起始标记,以...(三个点)作为结束标记。在文档块内部,可以按照层级关系组织键值对。
以下是一个示例,展示了如何使用文档块:
---
name: John Doe
age: 25
---
name: Jane Doe
age: 30
在这个例子中,有两个文档块,每个文档块包含一个键值对。第一个文档块的键是name,值为John Doe;第二个文档块的键是age,值为25。第二个文档块后面还有一个额外的---标记,表示文档块的结束。
文档块可以嵌套,以构建更复杂的数据结构。例如,可以将一个文档块嵌套在另一个文档块中:
person:
name: John Doe
age: 25
address:
street: 123 Main St.
city: Anytown
state: CA
zip: 12345
在这个例子中,person是一个文档块,包含三个键值对。其中,address是一个嵌套的文档块,包含四个键值对。通过这种方式,可以构建具有多个层级的数据结构。
server:
port: 8081
spring:
profiles:
active: "prod" # 激活对应的文档块
---
server:
port: 8083
spring:
profiles: "dev" # 指定属于哪个环境
---
server:
port: 8084
spring:
profiles: "prod" # 指定属于哪个环境
配置文件中有三个文档块(或称为“块”),每个块都包含有关服务器和Spring配置的信息。
第一个文档块中,服务器端口被设置为8081,并且激活的Spring配置文件是“prod”。
第二个文档块中,服务器端口被设置为8083,并且指定的Spring配置文件属于“dev”环境。
第三个文档块中,服务器端口被设置为8084,并且指定的Spring配置文件属于“prod”环境。