Как получить JSON вложенный объект - PullRequest
0 голосов
/ 12 июля 2020

Я использую Retrofit и хочу получить этот тип объекта в Android. Кто-нибудь может объяснить, как я могу получить? Я могу успешно получить один простой объект, но когда он находится внутри объекта, я получаю нулевое тело ответа.

Вот JSON

{
  "success": {
     "token": "djhfeieryueyjsdheirydjalbbvcxgdgfhjdgs",
     "name": "abc"         
  }
}

1 Ответ

0 голосов
/ 12 июля 2020

Это будет зависеть от возвращаемого значения, которое вы выбрали из вызова модернизации.

Например, преобразовав этот ответ в POJO, POJO будет

    -----------------------------------com.example.Example.java-----------------------------------

package com.example;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Example {

@SerializedName("success")
@Expose
private Success success;

public Success getSuccess() {
return success;
}

public void setSuccess(Success success) {
this.success = success;
}

}
-----------------------------------com.example.Success.java-----------------------------------

package com.example;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Success {

@SerializedName("token")
@Expose
private String token;
@SerializedName("name")
@Expose
private String name;

public String getToken() {
return token;
}

public void setToken(String token) {
this.token = token;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

Итак, ваш сетевой вызов будет

@POST("api") Call<Example> Login(@Body LoginRequest loginRequest);

Для доступа к нему это будет выглядеть как (псевдо)

public static void login(String uname, String pword) {
    Call<Example> getDataResponseSingle = retroInterface.Login(new LoginRequest(uname, pword));

getDataResponseSingle.enqueue()
        new Call<Example>() {
            @Override
            public void onSubscribe(Disposable d) {
            }

            @Override
            public void onSuccess(Example dataResponse) {
                dataResponse.getSuccess().getToken;
            }

            @Override
            public void onError(Throwable e) {
                e.printStackTrace();
            }
        });

    }

Вы также можете посмотреть: http://www.jsonschema2pojo.org/ для создания собственного POJO

Я возвращаю напрямую JSON Object например, Call<JSONObject> getDataResponseSingle = retroInterface.Login(new LoginRequest(uname, pword));

Где вы видите успешный ответ, вы получаете доступ к внутреннему классу (псевдо)

JSONObject main = response.body();
JSONObject success = main.getJSONObject("success");
...