2016-04-27 91 views
2

我正在使用Retrofit进行api调用。顶级对象根据请求的查询参数进行命名。例如,像这样的请求:翻新,顶级json对象更改名称

api.somewebsite.com/1.0/mix_info?mix_id=69

返回这样的响应:

{"69":{ 
    "mix_id":"69", 
    "mix_title":"A Title", 
    "mix_file":"https:example.com/mp3", 
    "mix_genres":"House,Pop", 
    "mix_dj_id":"57", 
    "number_votes":"390", 
    "station":"1" 
    } 
} 

下面有一个的screenie以及这有点儿显示格式: http://prnt.sc/axltcd

基本上,这取决于在传递到url中的数字mix_id=查询成为响应中返回的顶级json对象的名称。

我能破解在一起的东西还挺工作:

我有有一个成员变量,它是顶级对象模型Response类,我用改造的@SerializedName(“69”),以明确地设置名称。这当然只适用于ID为69的请求,否则响应返回空对象。

它看起来像这样:

public class Response { 

    @SerializedName("69") 
    private _69 _69; 
} 

不管怎样,我正在寻找一种方法来妥善处理这些格式奇怪的反应。这将如何完成?

+1

如何序列化一个HashMap? – plalx

+0

..那该怎么做 – Orbit

+1

好'hashMap.put('yourKey',yourData);序列化(hashMap)' – plalx

回答

0

您可以将您的回复作为JsonElemen接收,将其转换为JsonObject并通过您用于发送请求的全局变量获取元素。

响应:

public void onResponse(Call<JsonElement> call, Response<JsonElement> response) { 
     JsonElement jsonElement = response.body(); 
     JsonObject jObj= jsonElement.getAsJsonObject(); 
     JsonObject number= jObj.get(CONSTANT_WHICH_YOU_USED_FOR_REQEST).getAsJsonObject(); 
} 

随意问我,如果任何。