2016-04-27 3 views
2

Я использую модификацию, чтобы сделать вызов 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») в явную форме задайте имя. Это, конечно, будет работать только для запроса с идентификатором 69, иначе ответ возвращает нулевой объект.

Это выглядит следующим образом:

public class Response { 

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

Во всяком случае, я искал способ, чтобы правильно обработать эти странно отформатированные ответы. Как это будет сделано?

+1

Как насчет сериализации HashMap? – plalx

+0

.. что об этом – Orbit

+1

Ну 'hashMap.put ('yourKey', yourData); serialize (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(); 
} 

Не стесняйтесь спрашивать меня, если таковые имеются.

Смежные вопросы