我有一个接口(称为Content)和几个实现该接口的类(例如ContentVideo,ContentAd ...)。我收到一个包含这些对象列表的JSON对象。我开始在单独的类中手动反序列化那些对象,但是最近遇到了GSON,它将极大地简化此过程。但是我不确定如何实现这一点。
这是ContentVideoJSONParser
public ArrayList<ContentVideo> parseJSON(String jsonString) {
ArrayList<ContentVideo> videos = new ArrayList<>();
JSONArray jsonArr = null;
Gson gson = new Gson();
try {
jsonArr = new JSONArray(jsonString);
for(int i = 0; i < jsonArr.length(); i++) {
JSONObject jsonObj = jsonArr.getJSONObject(i);
ContentVideo cv = gson.fromJson(jsonObj.toString(), ContentVideo.class);
videos.add(cv);
}
} catch (JSONException e) {
e.printStackTrace();
}
return videos;
}
ContentAdJSONParser看起来完全一样,除了返回ContentAd对象的ArrayList以及用于检索对象的以下行:
ContentAd ca = gson.fromJson(jsonObj.toString(), ContentAd.class);
将这些类合并为一个类的最简单方法是什么?注意:一个JSON对象仅包含一个类,即ContentVideo或ContentAd。它们没有像其他SO问题中那样混杂在一起,因此需要TypeAdapter。
这似乎是一个简单的问题,但我无法弄清楚。谢谢你的帮助。
最佳答案
大概是这样吗?
public <T extends Content> ArrayList<T> parseJSON(String jsonString, Class<T> contentClass) {
ArrayList<T> contents = new ArrayList<>();
JSONArray jsonArr = null;
Gson gson = new Gson();
try {
jsonArr = new JSONArray(jsonString);
for(int i = 0; i < jsonArr.length(); i++) {
JSONObject jsonObj = jsonArr.getJSONObject(i);
T content = gson.fromJson(jsonObj.toString(), contentClass);
contents.add(content);
}
} catch (JSONException e) {
e.printStackTrace();
}
return contents;
}