gpt4 book ai didi

java - 使用 GSON 反序列化具有相同接口(interface)的类

转载 作者:行者123 更新时间:2023-11-30 07:20:50 24 4
gpt4 key购买 nike

我有一个接口(interface)(称为 Content)和几个实现该接口(interface)的类(例如 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;
}

关于java - 使用 GSON 反序列化具有相同接口(interface)的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37607521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com