概要
jYamlでオブジェクトをデシリアライズについて
サンプルコード
自作クラスに対するデシリアライズサンプル
name: parentName nameType: FULL_NAME child: name: childName nameType: FULL_NAME age: 10
独自作成クラス(親)
package jyaml; public class YamlData { private String name; private NameTypeEnum nameType; private YamlChildData child; // アクセサメソッドは略 }
独自作成クラス(子)
package jyaml; public class YamlChildData { private String name; private NameTypeEnum nameType; private int age; // アクセサメソッドは略 }
独自作成クラスで利用しているEnum
package jyaml; public enum NameTypeEnum { FIRST_NAME("1"),FAMILY_NAME("2"),FULL_NAME("3"); private String type; private NameTypeEnum(final String type) { this.type = type; } public String toValue() { return this.type; } public NameTypeEnum fromValue(String value) throws Exception { if (value.equals("1")) { return FIRST_NAME; } else if (value.equals("2")) { return FAMILY_NAME; } else if (value.equals("3")) { return FULL_NAME; } else { throw new IllegalArgumentException(); } } }
package jyaml; import java.io.File; import java.io.FileNotFoundException; import org.ho.yaml.Yaml; public class YamlObjectSample { private final static String CONF_PATH = File.separator + "conf"; public static void main(String[] args) { try { String dir = System.getProperty("user.dir"); YamlData yamlData = Yaml.loadType(new File(dir + CONF_PATH + File.separator + "yaml_object.yml"),YamlData.class); // 以下、独自作成クラスへのデシリアライズ System.out.println(yamlData.getName()); System.out.println(yamlData.getNameType()); // Enumのデシリアライズ // 以下、ネストした独自作成クラスへのデシリアライズ System.out.println(yamlData.getChild().getName()); System.out.println(yamlData.getChild().getNameType()); System.out.println(yamlData.getChild().getAge()); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
出力
parentName
FULL_NAME
childName
FULL_NAME
10