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.classと書けないので、TypeTokenを使ってTypeを取り出す
        Type type = new TypeToken>() {}.getType();

        // JSON->List
        List 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 件のコメント: