どんなデータが入ってくるのか決まっていない。けどキーは同じみたいな。結果的に汎用型で受け付けたい。そんなケースです。
いろいろ調べたんだけど方法があわからず。でしたが、実は普通にJsonObjectやJsonArrayつかえば良い。ということがわかりました。 配列の場合だけ気を付けないとダメ。という残念なことになっています。
コードはこんな感じ。
public class GsonObject {
public static void main(String[] args) {
Gson gson = new Gson();
// JSON->JsonObject(Map)
JsonObject his = gson.fromJson(new InputStreamReader(GsonList.class
.getResourceAsStream("history_map.json")), JsonObject.class);
System.out.println("---step1 Map---");
System.out.println(his);
// JSON->JsonArray(List)JsonArrayじゃないとキャストに失敗する。。。
JsonArray his2 = gson.fromJson(new InputStreamReader(GsonList.class
.getResourceAsStream("history_list.json")), JsonArray.class);
System.out.println("---step2 List---");
System.out.println(his2);
// JSON->JsonObject(POJO)
JsonObject his3 = gson.fromJson(new InputStreamReader(GsonList.class
.getResourceAsStream("history.json")), JsonObject.class);
System.out.println("---step3 Object---");
System.out.println(his3);
}
/**
* 解析結果を受け取るクラス
*/
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 Map---
{"kentousi":{"key":894,"message":"遣唐使"},"kamakura1":{"key":1192,"message":"鎌倉幕府"},"kamakura2":{"key":1185,"message":"鎌倉幕府"}}
---step2 List---
[{"key":894,"message":"遣唐使"},{"key":1192,"message":"鎌倉幕府"},{"key":1185,"message":"鎌倉幕府"}]
---step3 Object---
{"key":894,"message":"遣唐使"}
インプットしたデータは省略。
0 件のコメント:
コメントを投稿