SnakeYAMLを使ってYAMLをJavaオブジェクトに変換します。
入力のYAMLは次の通りです。
id: 1
name: John Doe
createdAt: 2019-05-30 00:00:00
マッピングするJavaオブジェクトは次の通りです。
package com.example;
import java.util.Date;
public class User {
private int id;
private String name;
private Date createdAt;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", createdAt=" + createdAt +
'}';
}
}
変換を行うコードは次の通りです。
package com.example;
import org.yaml.snakeyaml.Yaml;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Example {
public static void main(String[] args) throws IOException {
Path input = Paths.get("user.yml");
try (InputStream in = Files.newInputStream(input)) {
Yaml yaml = new Yaml();
User user = yaml.loadAs(in, User.class);
System.out.println(user);
}
}
}
結果は次のようになります。
User{id=1, name='John Doe', createdAt=Thu May 30 09:00:00 JST 2019}
上のコードでは loadAs
メソッドを使いましたが、load
メソッドを使うこともできます。Yaml
クラスのコンストラクタに型情報を含めた Constructor
オブジェクトを渡します。
package com.example;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.Constructor;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Example {
public static void main(String[] args) throws IOException {
Path input = Paths.get("user.yml");
try (InputStream in = Files.newInputStream(input)) {
Constructor constructor = new Constructor(User.class);
Yaml yaml = new Yaml(constructor);
User user = yaml.load(in);
System.out.println(user);
}
}
}
Constructor
オブジェクトを渡さなかった場合は User
クラスではなく Object
クラスにマッピングされます。