Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

JYaml | jYamlでオブジェクトをデシリアライズ

パンくず

Java
JYaml
jYamlでオブジェクトをデシリアライズ

概要

jYamlでオブジェクトをデシリアライズについて

サンプルコード

自作クラスに対するデシリアライズサンプル

Yamlデータファイル(yaml_object.yml)

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();
	    }
	  }
}

Yamlシリアライズサンプル

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