Android 改装,顶级json对象更改名称

Android 改装,顶级json对象更改名称,android,json,gson,retrofit,retrofit2,Android,Json,Gson,Retrofit,Retrofit2,我正在使用改型来进行api调用。顶级对象的命名取决于请求的查询参数。例如,这样的请求: {"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" } } public

我正在使用改型来进行api调用。顶级对象的命名取决于请求的查询参数。例如,这样的请求:

{"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" 
    }
}
public class Response {

     @SerializedName("69")
     private _69 _69;
}
api.somewebsite.com/1.0/mix\u info?mix\u 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" 
    }
}
public class Response {

     @SerializedName("69")
     private _69 _69;
}
这里还有一个屏幕,显示了以下格式:

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

我能拼凑出一些有用的东西:

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

看起来是这样的:

{"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" 
    }
}
public class Response {

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

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

您可以以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();
}
public void onResponse(调用、响应){
JsonElement JsonElement=response.body();
JsonObject jObj=jsonElement.getAsJsonObject();
JsonObject number=jObj.get(用于请求的常量);
}

如果有,请随时问我。

序列化HashMap怎么样?好的
HashMap.put('yourKey',yourData);serialize(hashMap)
你的建议没有任何意义。它可能没有任何意义,因为我从来没有做过任何这方面的工作,对改装一无所知,但我的观点是,如果你序列化的是hashMap而不是响应,那么我很确定默认情况下它会被正确序列化。否则,您可能必须配置自定义序列化程序(检查文档)。是否尝试使用
HashMap
反序列化响应?然后,您应该能够使用
entrySet()
从该映射中获取值。