改造,顶级json对象更改名称

时间:2016-04-27 19:17:03

标签: android json gson retrofit retrofit2

我正在使用Retrofit进行api通话。顶级对象的命名取决于请求的查询参数。例如,像这样的请求:

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" 
    }
}

还有一个屏幕,它有点显示格式: http://prnt.sc/axltcd

基本上,根据传递到url mix_id=查询的数字,将成为响应中返回的顶级json对象的名称。

我能够将一些有用的东西混在一起:

我有一个模型Response类,它有一个成员变量,它是顶级对象,我使用Retrofit的@SerializedName(" 69")来明确设置名称。当然,这只适用于id为69的请求,否则响应将返回null对象。

看起来像这样:

public class Response {

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

无论如何,我正在寻找一种方法来正确处理这些奇怪的格式化响应。怎么会这样做?

1 个答案:

答案 0 :(得分: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();
}

随时问我是否。