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