Android 改装,顶级json对象更改名称
我正在使用改型来进行api调用。顶级对象的命名取决于请求的查询参数。例如,这样的请求: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
{"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()
从该映射中获取值。