感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

SnakeYamlを使ってYAMLファイルからオブジェクトを作る

<スポンサーリンク>

SnakeYamlというのは、JavaでYAMLをパースしたり、出力する機能を持ったツールです。
以下のWebサイトからjarをダウンロードすることができます。
https://code.google.com/p/snakeyaml/

サンプルは以下を見ればたくさんあります。
https://code.google.com/p/snakeyaml/wiki/Documentation

Mavenのpom.xmlには以下のように書きます。

<dependencies>
  ...
  <dependency>
    <groupId>org.yaml</groupId>
    <artifactId>snakeyaml</artifactId>
    <version>1.14-SNAPSHOT</version>
  </dependency>
  ...
</dependencies>

実際にサンプルを作ってみます。
フォルダ構成はこんな感じ。

f:id:sho322:20140627090257j:plain

まず、Person.javaという名前と年齢を持つクラスから。

Person.java

package sample;

public class Person {
	private String name;
	private int age;
	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;
	}


}

このPerson.javaのオブジェクトをYAMLファイルから作ってみたい。
YAMLファイルは以下のとおりです。

person.yaml

!!sample.Person
name: urabe
age: 20

このperson.yamlを読み込むためにsnakeyamlを使います。
以下のように書きます。

UseSnakeYaml.java

package yaml;

import org.yaml.snakeyaml.Yaml;

import sample.Person;

public class UseSnakeYaml {

	public Person getPersonFromYaml() {
		Yaml yaml = new Yaml();
		Person person = (Person) yaml.load(getClass().getResourceAsStream("person.yaml"));
		return person;
	}
}

では、このクラスがちゃんと動くか、テストしてみます。

package yaml;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import org.junit.Test;

import sample.Person;

public class UseSnakeYamlTest {

	@Test
	public void Yamlファイルからオブジェクトを取得() {
		UseSnakeYaml usk = new UseSnakeYaml();
		Person actual = usk.getPersonFromYaml();

		assertThat(actual.getName(),is("urabe"));
		assertThat(actual.getAge(), is(20));
	}

}

結果はグリーン。うまいことYAMLから想定通りのオブジェクトを取得できました。

次はYAMLからMapやListを取得するサンプルを作ってみようと思います。

現場で使えるJavaライブラリ

現場で使えるJavaライブラリ