【Java】SnakeYAMLでYAMLファイルを読み込む方法

スポンサーリンク

Java で YAML ファイルの読み込み・変換をするライブラリである SnakeYAML の使い方についてです。

SnakeYAMLのライブラリ

 SnakeYAML を使用するには以下のライブラリを Maven や Gradle の依存関係で指定します。

<dependency>
    <groupId>org.yaml</groupId>
    <artifactId>snakeyaml</artifactId>
    <version>1.16</version>
</dependency>
compile 'org.yaml:snakeyaml:1.16'

 Maven Repository: org.yaml » snakeyaml
 Documentation - snakeyaml - YAML parser and emitter for Java - Google Project Hosting

SnakeYAMLの使い方

以下の User クラスを使用します。

YAMLからPOJOに変換する(Load)

List、Map、User クラスの YAML ファイルを読み込み、Java オブジェクトに変換します。

loadメソッドの場合は Cast する必要がありますが、loadAsメソッドであれば Class を引数に渡すことで Cast が不要になります。

結果は以下の通りです。User オブジェクトには YAML のハッシュKEYと一致する変数に変換されています。YAML ファイルの中に、User クラスに存在しないフィールドがあった場合はエラーになるので注意しましょう。

[Hesperiidae, Papilionidae, Apatelodidae, Epiplemidae]
{none=[null, null], bool=[true, false, true, false], int=42, float=3.14159, list=[LITE, RES_ACID, SUS_DEXT], dict={hp=13, sp=5}}
id=1, name=tasuku, hobby=[running, bouldering, baseball], skill={Java=null, Ruby=true}
{Time=Sat Nov 24 05:01:42 JST 2001, User=ed, Warning=This is an error message for the log file}
{Time=Sat Nov 24 05:02:31 JST 2001, User=ed, Warning=A slightly different error message.}
{Date=Sat Nov 24 05:03:17 JST 2001, User=ed, Warning=Unknown variable bar}

POJOからYAMLに変換する(Dump)

List、Map、User オブジェクトをそれぞれ作成して YAML に変換します。

結果は以下の通りです。User クラスの場合は変数名がそのまま KEY となっています。Map の場合は KEY:VALUE が そのままハッシュ形式で出力されていますね。そして見ても分かる通り、デフォルトだとフロースタイルで出力されます。ブロックスタイルで出力したい場合はdumpAs()メソッドを使用してDumperOptions.FlowStyle.BLOCKを指定してください。

[hoge, null, 1234, true]

{Java: 5, Ruby: 3, Python: 2}

!!yaml
hobby:
- running
- bouldering
- baseball
id: 1
name: tasukujp
skill:
  Java: true
  Ruby: null