Retrofit解析JSON动态键

8

我是Retrofit的新手。如何使用Retrofit解析下面的Json?

{
   "data": {
      "Aatrox": {
         "id": 266,
         "title": "a Espada Darkin",
         "name": "Aatrox",
         "key": "Aatrox"
      },
      "Thresh": {
         "id": 412,
         "title": "o Guardião das Correntes",
         "name": "Thresh",
         "key": "Thresh"
       }
   },
   "type":"champion",
   "version":"6.23.1"
}

你不使用 Retrofit 进行解析 - 你使用 Gson 进行反序列化 / 解析。 - OneCricketeer
3
无论如何,“data”应该是一个列表。因此,应该这样写:"data": [{ "name": "Aatrox", ...}, {"name": "Thresh", ...}]。这将使其更适合Gson POJO类所期望的格式。 - OneCricketeer
2个回答

15
你可以在你的POJO模型中包含一个Map<String, Champion>,以便反序列化并处理动态键。
示例:
public class ChampionData {
    public Map<String, Champion> data;
    public String type;
    public String version;
}

public class Champion {
    public int id;
    public String title;
    public String name;
    public String key;
}

除此之外,我对Retrofit并不熟悉,但正如评论中有人所说,反序列化是由Gson完成的:

public ChampionData champions = new Gson().fromJson(json, ChampionData.class);

接着之前有人回答的内容,假设您已添加 GsonConverterFactory,您可以执行以下操作:

public interface API {
    @GET("path/to/endpoint")
    Call<ChampionData> getChampionData();
}

1
假设您使用Retrofit2,构建Retrofit实例时,首先需要调用以下内容。

addConverterFactory(GsonConverterFactory.create())

接下来只需要编写一个POJO(例如MyPojoClass),将其映射到JSON,然后在Retrofit接口中添加以下内容即可。

Call<MyPojoClass> makeRequest(<some params>);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接