2015-10-26 7 views
1

У меня есть типичный запрос Retrofit API:Как разобрать дооснащения JSON ответ

RestAdapter restAdapter = new RestAdapter.Builder() 
     .setEndpoint(URL) 
     .build(); 

ApiEndpointInterface api = restAdapter.create(ApiEndpointInterface.class); 

api.getToken('1', new Callback<DefaultResponse>() { 
    @Override 
    public void success(DefaultResponse json, Response response) { 
     // 
    } 

    @Override 
    public void failure(RetrofitError response) { 
     // 
    } 
}); 

И Возвращенный JSON является:

{"success":true,"data":{"token_id":"pPt9AKl0Cg","token_key":"8ax224sFrJZZkStAQuER"}} 

Как я могу разобрать этот JSON? Кажется неправильным/утомительным создание нового класса модели для каждого отдельного ответа в моем приложении. Есть ли лучший способ сделать это?

ответ

2

вы должны написать свой класс модели, как показано ниже

public class MyResponseModel {//write setters and getters. 
     private boolean success; 
     private DataModel data; 

    public static class DataModel { 
     private String token_id; 
     private String token_key; 
    } 
} 

теперь в вашем методе getToken() должен выглядеть следующим образом

getToken('1', Callback<MyResponseModel> response); 

retrofit будет анализировать реакцию и преобразовать его в класс выше.

+0

Это кажется неправильным/утомительным, чтобы создать новый класс модели для каждого отдельного ответа через мое приложение, хотя. У меня есть дюжина различных ответов JSON во всем приложении. :/ – user5486944

+0

ikr, поэтому я всегда пишу класс, который называется ResponseModel, который добавляет к нему разные переменные, но tbh, чтобы все было в чистоте, вы должны иметь класс модели для каждого ответа, если только они одинаково не равны. все в порядке, чтобы иметь много классов, главное - содержание внутри и насколько оно сложное. в этом случае классы моделей - это просто классы pojo – k0sh

0

Попробуйте этот код,

JsonElement je = new JsonParser().parse(s); 
JsonObject asJsonObject = je.getAsJsonObject(); 
JsonElement get = asJsonObject.get("data"); 
System.out.println(s + "\n" + get); 
JsonObject asJsonObject1 = get.getAsJsonObject(); 
JsonElement get1 = asJsonObject1.get("token_id"); 
System.out.println(get1); 
JsonElement get2 = asJsonObject1.get("token_key"); 
System.out.println(get2); 
Смежные вопросы