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