【问题标题】:Retrofit 2.0 nested json with different subtypes具有不同子类型的 Retrofit 2.0 嵌套 json
【发布时间】:2019-03-21 13:45:43
【问题描述】:

我正在使用改造 2.0 和 gson 将 json 转换为 pojo。 我得到了以下 json 对象

{
"type": "champion",
"format": "standAloneComplex",
"version": "9.6.1",
"data": {
    "Aatrox": {...},
    "Ahri": {...},
     ...       
} }

我的问题是内部数据每个条目都是一个新类(它是同一个类但名称不同)

我可以单独访问每个类

public class Champions {

@SerializedName("type")
@Expose
public String type;
@SerializedName("format")
@Expose
public String format;
@SerializedName("version")
@Expose
public String version;
@SerializedName("data")
@Expose
public Data data;

这行得通

public class Data {
@SerializedName("Aatrox")
@Expose
public Champion aatrox;
@SerializedName("Ahri")
@Expose
public Champion ahri;}

但是

public class Data {
publc List<Champion> champions = new ArrayList<>();

没有

如何获取列表中的所有条目?

我尝试在Data 中添加List&lt;Champion&gt;,但我不知道在@SerializedName 中添加什么。

关于如何从数据中检索List&lt;Champion&gt; 有什么建议吗?

我从中获取 json 的网站是 http://ddragon.leagueoflegends.com/cdn/9.6.1/data/en_US/champion.json

【问题讨论】:

  • 如果你已经得到了 JSON 响应的列表形式,直接放入jsonschema2pojo.org 并下载相应的数据类。所需的格式和类、子类和集合都将在其中。只需将这些类添加到您的项目并开始使用它们。
  • @MDNaseemAshraf 我已经做到了,并想出了我在这里发布的内容,它为每个可用的冠军生成了一个类

标签: android json gson retrofit2


【解决方案1】:

设置您的data 变量数据类型Map&lt;String, Champion&gt; 而不是设置它objectList 并将以下getter 方法添加到您的模型中以检索List&lt;Champion&gt;

public List<Champion> getChampions(){
    if(data != null){
        return new ArrayList<Value>(data.values());
    }
    return null; // you can set return new ArrayList<>(); to avoid null exception 
}

【讨论】:

    【解决方案2】:

    我在我的项目中使用了类似的代码。也许它会起作用。自己安排。

     Map<String, Champion> championList;
     List<String> keyset = new ArrayList<>(championList.keySet());
     List<String> values = new ArrayList<>(championList.values());
    
      for (int i = 0; i < values.size(); i++) {
                            NewItem item = new NewItem(values.get(i), keyset.get(i));}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-01
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      相关资源
      最近更新 更多