今日はリスト形式だけじゃなく、Mapや自分で定義したオブジェクトのデータをシリアライズとデシアライズしてみます。
まずはシリアライズ
Yaml.dump(シリアライズしたいオブジェクトや文字列);でこれがデシアライズ
Yaml.load(デシリアライズしたいファイルや文字列);まあシリアライズとデシアライズしたいだけならこの二つだけで充分ぽいので早速サンプルです。
昨日に引き続きまずはlistをシリアライズしてデシアライズします
今回読み込みyamlファイル
- hoge - fuga - mofu - - fufu1 - fufu2たいしたことしてないけどサンプル
//yamlファイルの読み込み(デシアライズ)
try {
List <Object> list1 = (ArrayList<Object>) Yaml.load(new File("list.yml"));
System.out.println(list1.get(0));
System.out.println(list1.get(1));
System.out.println(list1.get(2));
System.out.println(list1.get(3));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
System.out.println();
System.out.println("==============");
System.out.println();
//リストのシリアライズ化
List<Integer> list2 = new ArrayList<>();
list2.add(0);
list2.add(1);
list2.add(2);
System.out.println(Yaml.dump(list2));
続いてMapを扱います読み込んだyamlファイルこちら
Name: Andre Agassi Birthplace: LasVegas Height: 5'11'' (180 cm) Turned Pro: 1986でサンプル
try {
Map<Object, Object> map1 = (HashMap<Object, Object>) Yaml.load(new File("map.yml"));
System.out.println(map1.get("Name"));
System.out.println(map1.get("Birthplace"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Map<String, Object> map2 = new HashMap<>();
map2.put("name", "hoge");
map2.put("age", 20);
map2.put("height", 180);
map2.put("weight", 70);
System.out.println(Yaml.dump(map2));
次は自分で作成したクラスを扱います今回扱いクラスはこれ(すげー適当に作ったのは気にしない方向で)
package test;
public class Hoge {
private int num;
private String str;
public Hoge(){
}
public Hoge(int num, String str) {
this.num = num;
this.str = str;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
}
さっそくシリアライズしてみます
Hoge hoge = new Hoge(10, "test"); System.out.println(Yaml.dump(hoge));出力結果
--- !test.Hoge
num: 10
str: test
普通に出力すると!test.Hogeといったふうオブジェクトの情報が入ってしまいます。
これはこれでデシアライズする時にオブジェクトを特定できて便利なんですけど他の言語で扱えなくなってしまいます。
このオブジェクトの情報を表示しなくするためにはYaml.dumpの第2引数にtrueを設定すれば表示されなくなります。
Yaml.dump(シリアライズしたいオブジェクトや文字列, true);第2引数を設定した出力結果
---
num: 10
str: test
で次はデシアライズです
読み込みファイルは先ほど出力した結果をファイルにしたものです
Hoge hoge1 = (Hoge)Yaml.load("object.yml");
System.out.println(hoge1.getNum());
System.out.println(hoge1.getStr());
オブジェクトの指定がある時はこの方法でうまくいくのですが、情報がない時失敗していまします。オブジェクトの情報が無い時のデシアライズのサンプル
Hoge hoge1 =Yaml.loadType(Yaml.dump("object.yml"),Hoge.class);
System.out.println(hoge1.getNum());
System.out.println(hoge1.getStr());
情報がないなら渡してあげればいいってだけですね。こんな感じでYamlは様々なオブジェクトを扱えるので便利そうです。
今回は日本語は扱ってないですけどどうやら日本語も普通に使えるようです
公式のJavadocはこちらhttp://jyaml.sourceforge.net/javadoc/index.html
明日も引き続きYamlファイルの扱い方に付いてになる予定です
0 件のコメント:
コメントを投稿