2016-04-27 50 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(); 
} 

隨意問我,如果任何。