0

This is my 1st java project.

I m using a 3rd party Flight API in Java.

Actually the issue is, if the data received only has 1 record, I get data in Object format and if data received has more than 1 record, I get data in Array format. Now the issue is, I created a POJO class in which I defined it as Array but when i get data in Object format, It gives error :

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 + "]";
    }
}

Below is the for loop in which i 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());
}

In Above code,

MlAirlineList
sometimes comes as Array and sometimes has Object based on number of records available.

Object Data Format:

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

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

Please guide me in right direction.

Thanks

Ravinder Singh
  • 173
  • 1
  • 1
  • 9

2 Answers2

0

From what I can see you have an Array of Arrays in JSON response you are trying to process.

Try

for (MlAirlineList airline : mlflights.getGetFlightAvailibilityResponse().getAirlineList()) {
    mlFlightAirline.put(airline[0], airline[1]);
}
Ver
  • 328
  • 2
  • 7
  • 19
-1

You can put manual check for this for hot-fix.If response start with "{" and ends with "}" then you can add [ and ] into the response in start and end part .this will surely work

SRK
  • 135
  • 8