Как определить, находятся ли данные, полученные из API, в формате Array или Object Format в JAVA? - PullRequest
0 голосов
/ 25 апреля 2019

Это мой первый Java-проект.

Я использую сторонний API-интерфейс Flight на Java.

На самом деле проблема в том, что если полученные данные имеют только 1 запись, я получаю данные в формате объекта, а если полученные данные имеют более 1 записи, я получаю данные в формате массива.Теперь проблема в том, что я создал класс POJO, в котором я определил его как массив, но когда я получаю данные в формате объекта, он выдает ошибку:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1
public class MlFlightGetFlightAvailibilityResponse {

    private MlAirlineList[] AirlineList;

    public MlAirlineList[] getAirlineList() {
        return AirlineList;
    }

    public void setAirlineList(MlAirlineList[] AirlineList) {
        this.AirlineList = AirlineList;
    }

    @Override
    public String toString() {
        return "ClassPojo [AirlineList = " + AirlineList + "]";
    }
}

public class MlAirlineList {

    private String AirlineCode;
    private String AirlineName;

    public MlAirlineList(String AirlineCode, String AirlineName) {
        this.AirlineCode = AirlineCode;
        this.AirlineName = AirlineName;
    }

    public String getAirlineCode() {
        return AirlineCode;
    }

    public void setAirlineCode(String AirlineCode) {
        this.AirlineCode = AirlineCode;
    }

    public String getAirlineName() {
        return AirlineName;
    }

    public void setAirlineName(String AirlineName) {
        this.AirlineName = AirlineName;
    }

    @Override
    public String toString() {
        return "ClassPojo [AirlineCode = " + AirlineCode + ", AirlineName = " + AirlineName + "]";
    }
}

Ниже приведен цикл for, в котором яget error

Map<String, String> mlFlightAirline = new HashMap<>(); // Unique Flight Airline List
Gson gson = new Gson();
MlFlightResponse mlflights = gson.fromJson(mlResponse, MlFlightResponse.class); // mlResponse is JSON response

public class MlFlightResponse {

    private MlFlightGetFlightAvailibilityResponse GetFlightAvailibilityResponse;

    public MlFlightGetFlightAvailibilityResponse getGetFlightAvailibilityResponse() {
        return GetFlightAvailibilityResponse;
    }

    public void setGetFlightAvailibilityResponse(MlFlightGetFlightAvailibilityResponse GetFlightAvailibilityResponse) {
        this.GetFlightAvailibilityResponse = GetFlightAvailibilityResponse;
    }

    @Override
    public String toString() {
        return "ClassPojo [GetFlightAvailibilityResponse = " + GetFlightAvailibilityResponse + "]";
    }
}

for (MlAirlineList airline : mlflights.getGetFlightAvailibilityResponse().getAirlineList()) {
    mlFlightAirline.put(airline.getAirlineCode(), airline.getAirlineName());
}

В приведенном выше коде

MlAirlineList
иногда выступает в качестве массива, а иногда имеет объект в зависимости от количества доступных записей.

Формат данных объекта:

{
    "AirlineList": {
        "AirlineCode":"test",
        "AirlineName":"test"
    }
}

{
    "AirlineList": [{
        "AirlineCode":"test",
        "AirlineName":"test"
    },
    {
        "AirlineCode":"test",
        "AirlineName":"test"
    }]
}

Пожалуйста, направьте меня в правильном направлении.

Спасибо

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Из того, что я вижу, у вас есть ответ Array of Arrays в JSON, который вы пытаетесь обработать.

Попробуйте

for (MlAirlineList airline : mlflights.getGetFlightAvailibilityResponse().getAirlineList()) {
    mlFlightAirline.put(airline[0], airline[1]);
}
0 голосов
/ 25 апреля 2019

Вы можете поставить ручную проверку на это для оперативного исправления. Если ответ начинается с "{" и заканчивается "}", то вы можете добавить [и] в ответ в начальной и конечной частях. Это, безусловно, будет работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...