2013年7月21日日曜日

[Java]JSONをPOJOにバインドする(List,[])

JSONからPOJO(Bean)に変換する処理はめんどくさいです。 Google社製のGSONでは、データ形式にListや配列としてバインドすることができます。 で、コードはこんな感じ。
class GsonList {

 public static void main(String[] args) {

  Gson gson = new Gson();

  // List<History>.classと書けないので、TypeTokenを使ってTypeを取り出す
  Type type = new TypeToken<List<History>>() {}.getType();

  // JSON->List<POJO>
  List<History> his = gson.fromJson(new InputStreamReader(
    GsonList.class.getResourceAsStream("history_list.json")), type);

  System.out.println("---step1 List---");
  System.out.println(his);

  // JSON->POJO[]
  History[] his2 = gson.fromJson(new InputStreamReader(
    GsonList.class.getResourceAsStream("history_list.json")), History[].class);

  System.out.println("---step2 []---");
  System.out.println(Arrays.toString(his2));
  
  
 }

 /**
  * 解析結果を受け取るクラス
  */
 static class History {
  private int key;
  private String message;

  @Override
  public String toString() {
   StringBuffer sb = new StringBuffer();
   sb.append("[");
   sb.append("key=").append(key);
   sb.append(" message=").append(message);
   sb.append("]");

   return new String(sb);
  }
 }
}
出力結果は次の通り。
---step1 List---
[[key=894 message=遣唐使], [key=1192 message=鎌倉幕府], [key=1185 message=鎌倉幕府]]
---step2 []---
[[key=894 message=遣唐使], [key=1192 message=鎌倉幕府], [key=1185 message=鎌倉幕府]]
インプットしたJSONは次の通り。

[
    {
        "key": 894,
        "message": "遣唐使"
    },
    {
        "key": 1192,
        "message": "鎌倉幕府"
    },
    {
        "key": 1185,
        "message": "鎌倉幕府"
    }
]

0 件のコメント :