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

标签 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 的请求,否则响应将返回空对象。

看起来像这样:

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();
}

有的话随时问我。

关于android - 改造,顶级 json 对象更改名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36898971/

相关文章:

android - 使用 SharedPreferences.getAll() 调用 keySet()

python方法具有1个变量的嵌套字典

java - 使用Gson将JSON反序列化为java记录

android - 在共享所有类型的文件时,内容提供程序中#getType() 和#getStreamTypes() 的实现应该是什么样的

Android 问题....为什么没有套接字异常?变通?

Android GrantPermissionRule 不适用于 api-27

json - JSONObject 的 Jackson 2 等价物是什么?

json - 如何使用 awk/sed 在两行之间添加新的文本行? (在文件中)

java - 将 Mongodb 日期转换为 Java 日期时出错

java - 如何在 Eclipse 中使用 gson 将 ResultSet 查询转换为 JSON?