JSONからPOJO(Bean)に変換する処理はめんどくさいです。リフレクションでルールを決めて変換。というのもめんどくさいですね。
そこで、JSONを解析するライブラリを利用します。
JSON系のライブラリはいくつかありますが、今回はGoogle社製のGSONを使ってみました。コードはこんな感じ。
よく紹介されているレベルのコードと変わりませんが、以下のようなポイントがあります。
- private static final の変数に値を突っ込んでいる
- 内部クラス(staticですが)を利用する
- 変数名と異なる項目をバインドしている
この辺を気にする人には参考になると思います。
public class GsonBasic {
public static void main(String[] args) {
Gson gson = new Gson();
//JSON->POJO(1)
History his = gson.fromJson(
new InputStreamReader(GsonBasic.class
.getResourceAsStream("history.json")), History.class);
System.out.println("---step1---");
System.out.println(his);
//JSON->POJO(1)
History2 his2 = gson.fromJson(
new InputStreamReader(GsonBasic.class
.getResourceAsStream("history.json")), History2.class);
System.out.println("---step2---");
System.out.println(his2);
}
// 内部クラスにする場合、staticにしないと面倒が起る
/**
* 解析結果を受け取るクラス(1)
*/
static class History {
// final にすることもできる
private final int key;
private final String message;
// コンストラクタで初期化することで、GSONでもセットできる
public History() {
key = 0;
message = null;
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("key=").append(key);
sb.append(" message=").append(message);
return new String(sb);
}
}
/**
* 解析結果を受け取るクラス(2)
*/
static class History2 {
// JSONのキー名と変数名が異なる場合、@SerializedNameを使う
@SerializedName("key")
private int mKey = 0;
@SerializedName("message")
private String mMessage = "";
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("key=").append(mKey);
sb.append(" message=").append(mMessage);
return new String(sb);
}
}
}
出力結果は次の通り。
---step1---
key=894 message=遣唐使
---step2---
key=894 message=遣唐使
インプットしたJSONは次の通り。
{
"key": 894,
"message": "遣唐使"
}
0 件のコメント:
コメントを投稿