Retrofit 2使用动态密钥序列化JSON结果

时间:2016-07-28 19:43:00

标签: android json retrofit2

我有一个api,它返回的数据结构类似于:

{
   "1": {
        "url":"http://www.test.com",
        "count":2
   },
   "3": {
        "url":"http://www.test.com",
        "count":12
   },
   "16": {
        "url":"http://www.test.com",
        "count":42
   }
}

名称是id。它会不时变化,所以我不知道钥匙。

我如何序列化呢?

2 个答案:

答案 0 :(得分:1)

我认为您必须使用转换器(GSON转换器或Jackson转换器)并使用TypeAdapter解析其中的JSON答案。

private static final Gson GSON = new GsonBuilder()
            .registerTypeAdapter(ApiEntity.class, new ApiEntityAdapter())
            .create();

private static final Retrofit RETROFIT = new Retrofit.Builder()
            ...
            .addConverterFactory(GsonConverterFactory.create(GSON))
            .build();

关于TypeAdapter,您可以阅读here

但是如果你能改变api的答案,你最好建立一个这样的结构

[ {"id":1, "url":"http://www.test.com", "count":2},
  {"id":3, "url":"http://www.test.com", "count":12}, 
...]

答案 1 :(得分:1)

Retrofit可以将这种结构序列化为地图。

public final Map<String, MyDataStructure> items;

在您的情况下,这将产生一个大小为3的地图,其中包含以下内容

"1" -> { "url":"http://www.test.com", "count":2 }
"3" -> { "url":"http://www.test.com", "count":12 }
"16" -> { "url":"http://www.test.com", "count":42 }