这是我参与8月更文挑战的第15天,活动详情查看:8月更文挑战
什么是Yaml
YAML (YAML Ain't a Markup Language, YAML不是一种标记语言),YAML突破了传统的标签式标记语言,提供了更加简洁,更加直观的数据表达模式,Yaml从格式来看是参考了JSON的格式,但它比JSON的表达更加的简洁。现在YAML已经有了Java,C/C++, Ruby, Python, Perl, C#, PHP等主流语言的支持。
Yaml的优点
-
YAML易于人们阅读。
-
YAML数据在编程语言之间是可移植的。
-
YAML匹配敏捷语言的本机数据结构。
-
YAML具有一致的模型来支持通用工具。
-
YAML支持单程处理。
-
YAML具有表现力和可扩展性。
-
YAML易于实现和使用。
YML语法
1. 约定
-
k: v 表示键值对关系,冒号后面必须有一个空格
-
使用空格的缩进表示层级关系,空格数目不重要,只要是左对齐的一列数据,都是同一个层级的
-
大小写敏感
-
缩进时不允许使用Tab键,只允许使用空格。
-
松散表示,java中对于驼峰命名法,可用原名或使用-代替驼峰,如java中的lastName属性,在yml中使用lastName或 last-name都可正确映射。
2. 值类型
1) 字符串
默认所有的 ":" 后的值,都认为是字符串,如果加上''或者""的值,可以使用回车或Tab来对字符串格式化。
如:
test: "hello world
"
会输出:
{"test":"hello world\n"}
2) 日期
在不加''或者""的情况下,日期格式的值,就会认为是日期。
test: 2019-01-02
3) 对象
对象的创建方法,用回车换行,并且增加缩进,对象的属性的格式也是k: v, 如:
info:
version: 1.0
author: tntxia
输出:
"info":{"version":1,"author":"tntxia"}
4) 数组
在值前加 - , 则认为是数组,如:
pet:
- Dog
- Cat
- Bird
- Hamster
输出:
"pet":["Dog","Cat","Bird","Hamster"]}
数组的元素,如果是对象的话,则 - 后增加对象,如:
people:
- name: tntxia
age: 33
- name: Tom
age: 22
输出:
"people":[{"name":"tntxia","age":33},{"name":"Tom","age":22}]
Yaml解析框架SnakeYaml
SnakeYaml 是一个开源的Yaml解析框架,
Yaml的官方页面:github.com/topics/snak…
SnakeYaml的Maven依赖:
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.26</version>
</dependency>
SnakeYaml的Java解析代码:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Map;
import org.yaml.snakeyaml.Yaml;
public class YamlUtil {
public static Map<String,Object> loadYamlMap(String filePath) throws FileNotFoundException{
Map<String, Object> ymlMap = null;
ymlMap = new Yaml().load(new FileInputStream(filePath));
return ymlMap;
}
}