Java读写YAML文件并转为对象

YAML具体语法定义可参考官网:https://yaml.org/

Java实现的相关库有:  
  - JvYaml             # Java port of RbYaml
  - SnakeYAML          # Java 5 / YAML 1.1
  - YamlBeans          # To/from JavaBeans
  - JYaml              # Original Java Implementation
  - Camel              # YAML 1.2 for Java. A user-friendly OOP library.

本文采用SnakeYAML来实现读写YAML文件

简介

SnakeYaml是一个完整的YAML1.1规范Processor,支持UTF-8/UTF-16,支持Java对象的序列化/反序列化,支持所有YAML定义的类型(map,omap,set,常量,具体参考http://yaml.org/type/index.html)。

SnakeYAML 要求 Java 7 或以上 (Java 6 可使用的版本是 1.23)。

开始使用

首先引入maven依赖,最新版本为1.26,其他版本可查看:https://search.maven.org/artifact/org.yaml/snakeyaml

<dependency>
    <groupId>org.yaml</groupId>
    <artifactId>snakeyaml</artifactId>
    <version>1.26</version>
</dependency>

简单的例子:

// 读
String yamlStr = "key: hello yaml";
Yaml yaml = new Yaml();
Object obj = yaml.load(yamlStr);
System.out.println(obj);

// 输出
{key=hello yaml}

其他的load、loadAs方法:

public Object load(String yaml)

public Object load(InputStream io) 

public Object load(Reader io) 

public <T> T loadAs(Reader io, Class<T> type) 

public <T> T loadAs(String yaml, Class<T> type) 

public <T> T loadAs(InputStream input, Class<T> type) 
// 转为对象可使用 loadAs
Yaml yaml = new Yaml();
Person person = yaml.loadAs(inputStream, Person.class)

如果需要将对象写到文件,则可以使用dump相关方法:

Map<String, Object> data = new HashMap<String, Object>();
data.put("name", "Silenthand Olleander");
data.put("race", "Human");
data.put("traits", new String[] { "ONE_HAND", "ONE_EYE" });

Yaml yaml = new Yaml();
StringWriter writer = new StringWriter();  // 采用FileWriter则可以写到文件
yaml.dump(data, writer);
System.out.println(writer.toString());

具体可参考官方文档:https://bitbucket.org/asomov/snakeyaml/wiki/Documentation