我有一个接口(称为内容)和几个实现该接口的类(例如ContentVideo,ContentAd ...)。我收到一个JSON对象,其中包含这些对象的列表。我开始在单独的类中手动反序列化这些对象,但最近遇到了GSON,这将极大地简化了这个过程。但我不确定如何实现这一点。
这是ContentVideoJSONParser
public class Main extends Application {
private final int PREF_MIN_WIDTH = 500;
private final int PREF_MIN_HEIGHT = 500;
@Override
public void start(Stage primaryStage) {
try {
Scene scene = new Scene(new HBox(), PREF_MIN_WIDTH, PREF_MIN_HEIGHT);
primaryStage.setScene(scene);
primaryStage.showingProperty().addListener((observable, oldValue, showing) -> {
if(showing) {
primaryStage.setMinHeight(primaryStage.getHeight());
primaryStage.setMinWidth(primaryStage.getWidth());
primaryStage.setTitle("My mininal size is: W"+ primaryStage.getMinWidth()+" H"+primaryStage.getMinHeight());
}
});
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
ContentAdJSONParser看起来完全相同,除了返回ContentAd对象的ArrayList以及此行以检索对象:
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;
}
将这些与类合并为一个的最简单方法是什么?注意:一个JSON对象只包含一个类,ContentVideo或ContentAd。它们不像其他SO问题那样混合,这需要TypeAdapter。
这似乎是一个直截了当的问题,但我无法弄清楚。谢谢你的帮助。
答案 0 :(得分:1)
或许这样的事情?
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;
}