Parsing nested JSON using RetroFit for Android

DVassilev

I'm using RetroFit in order to communicate with my API. The response is JSON and one of JSON objects ('user') is a string. I'd like to parse that string into JSON.

I have a class for the response:

public class TokenModel {
   @SerializedName("access_token")
   private String accessToken;

   @SerializedName(".expires")
   private String expiryDate;

   private UserModel user;


   public String getAccessToken() {
       return accessToken;
   }

   public void setAccessToken(String accessToken) {
       this.accessToken = accessToken;
   }

   public String getExpiryDate() {
       return expiryDate;
   }

   public void setExpiryDate(String expiryDate) {
       this.expiryDate = expiryDate;
   }

   public UserModel getUser() {
       return user;
   }

   public void setUser(UserModel user) {
       this.user = user;
   }
}

and a class for the user:

public class UserModel {
   private int id;

   private String email;

   private String firstName;

   private String lastName;

   private String profileImageUrl; etc...

However, because the 'user' object in response is a string it needs to be first parsed into JSON. I'm unsure how to do this and still make it work with the model. Is there a way to tell RetroFit to first parse it into JSON before applying it to the model?

Thank you, Daniel

DVassilev

Turns out to be quite simple using the advice of @corsair992.

Create a custom deserializer to parse string into Json:

public class UserDeserializer implements JsonDeserializer<UserModel> {
    @Override
    public UserModel deserialize(JsonElement jsonElement, Type typeOF,
                                 JsonDeserializationContext context)
            throws JsonParseException {
        String userString = jsonElement.getAsString();
        JsonElement userJson = new JsonParser().parse(userString);

        return new Gson().fromJson(userJson, UserModel.class);
    }
}

then set it as a converter on your rest adapter:

RestAdapter restAdapter = new RestAdapter.Builder()
                .setLogLevel(RestAdapter.LogLevel.FULL)
                .setConverter(new GsonConverter(new GsonBuilder().registerTypeAdapter(UserModel.class, new UserDeserializer()).create()))
                .setEndpoint(getString(R.string.url_base))
                .build();

That will now convert the string into Json and make it function with the model.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Parsing JSON into Object Model with Retrofit in Android

분류에서Dev

Android Json Parsing Using GSON

분류에서Dev

android parsing json data using ION

분류에서Dev

Parsing nested JSON using body-parser and express

분류에서Dev

(Android) Java: JSON Parsing

분류에서Dev

Android - Broken JSON parsing

분류에서Dev

Android App JSON Parsing

분류에서Dev

android json parsing No value for tag

분류에서Dev

Android - Failure while parsing JSON

분류에서Dev

Parsing JSON to Object using Jackson

분류에서Dev

Android: deserialize dynamic JSON with Retrofit and Jackson

분류에서Dev

Android Parsing JSON object inside another object

분류에서Dev

Android의 JSON, Retrofit 2 및 변환기

분류에서Dev

android, php, parsing JSON in php file sent from android

분류에서Dev

Parsing JSON with @

분류에서Dev

Retrofit Json Parsing을 사용하여 사용자 프로필 데이터 반환

분류에서Dev

Using stringify for nested JSON to use in localStorage

분류에서Dev

Parsing base64 using JSON file in Java

분류에서Dev

Get the elements from nested JSON with Python using json lib

분류에서Dev

Coroutine Kotlin Android with Retrofit

분류에서Dev

Android Retrofit 파싱

분류에서Dev

Android : Kotlin-Retrofit2-Moshi | 복잡한 json 작업

분류에서Dev

JSON @Body Retrofit Android에 "param"이름을 포함하는 방법

분류에서Dev

Android 용 RetroFit을 사용하여 중첩 된 JSON 구문 분석

분류에서Dev

Android : Retrofit 및 Jackson을 사용하여 동적 JSON 역 직렬화

분류에서Dev

Retrofit 구문 분석 동적 JSON 응답 키 (Android)

분류에서Dev

Android에서 Retrofit을 사용한 JSON 응답

분류에서Dev

Android에서 Json Object로 Retrofit 결과 가져 오기

분류에서Dev

Android : Retrofit 2 및 GSON 및 JSON 관련 문제

Related 관련 기사

뜨겁다태그

보관