Yaml简介

532 阅读2分钟

这是我参与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;
	}
}