Как вы анализируете объект json внутри массива json? - PullRequest
0 голосов
/ 07 марта 2019

Я довольно слаб с JSON, и, возможно, у меня глупый вопрос, и мне было интересно, как проанализировать JSON объект, помещенный в массив JSON.Итак, на данный момент у меня есть

public Single<Profile> doProfileApiCall() {
        return Rx2AndroidNetworking.post(ApiEndPoint.ENDPOINT_PROFILE)
                .addHeaders(mApiHeader.getProtectedApiHeader())
                .build()
                .getObjectSingle(Profile.class);

Для получения параметров моего профиля, но в моих конечных точках у меня есть:

[{"Name": "this", "Email","that@gmail.com"}]

Моя конечная точка настроена как:

 public static final String ENDPOINT_PROFILE =
            BuildConfig.BASE_URL
            + "/linktojson"; 

, что дает мне вышеупомянутое JSON.но проблема в [], как мне изменить это с помощью:

 public Single<Profile> doProfileApiCall() {
            return Rx2AndroidNetworking.post(ApiEndPoint.ENDPOINT_PROFILE)
                    .addHeaders(mApiHeader.getProtectedApiHeader())
                    .build()
                    .getObjectSingle(Profile.class);

так, чтобы я мог использовать свой класс модели profile.java, который имеет

public class Profile {
    @Expose
    @SerializedName("Name")
    private String name;
    @Expose
    @SerializedName("Email")
    private String email;
    etc...
}

Любая идея, какпойти об этом?

Ответы [ 2 ]

1 голос
/ 08 марта 2019

В методе doProfileApiCall () вместо .getObjectSingle используйте

.getJSONArraySingle(ProfileList.class)

Теперь создайте новый класс ProfileList.java со следующим кодом.

List<Profile> profileList = new ArrayList<>();

public List<Profile> getProfileList() {
    return profileList;
}

public void setProfileList(List<Profile> profileList) {
    this.profileList = profileList;
}

Измените тип повторенияМетод doProfileApiCall для

public Single<ProfileList> doProfileApiCall()

Всякий раз, когда вы хотите получить доступ к данным, используйте их с позицией списка 0, когда в будущем вы получите больше данных, вы можете соответствующим образом проиндексировать данные.

0 голосов
/ 08 марта 2019

Как правило, если JSON корневой объект array, вы должны использовать List на стороне Java. В вашем случае у вас есть array, поэтому используйте связанный метод:

return Rx2AndroidNetworking.post(ApiEndPoint.ENDPOINT_PROFILE)
          .addHeaders(mApiHeader.getProtectedApiHeader())
          .build()
          .getObjectListSingle(Profile.class);

Rx2ANRequest источник.

...