0

I have a JSON response that looks something like:

And a Subscription POJO class and inside it, is an Arraylist of the "subscriptionPlans":

SubscriptionDetails.java

@Expose()
@SerializedName("subscriptionPlans")
public ArrayList<SubscriptionPlans> subscriptionPlans;


public ArrayList<SubscriptionPlans> getSubscriptionPlans() {
    return subscriptionPlans;
}

@Override
public String toString() {
    return "SubscriptionDetails{" +
            "subscriptionPlans=" + subscriptionPlans +
            '}';
}

SubscriptionPlans.java

@SerializedName("plan_name")
@Expose
public String planName;

@SerializedName("description")
@Expose
public String description;

@SerializedName("amount")
@Expose
public String amount;

public String getPlanName() {
    return planName;
}

public String getDescription() {
    return description;
}

public String getAmount() {
    return amount;
}

I'm using Gson to get the data from the JSON and populate it to the various POJO classes like so:

Gson gson = new Gson();
SubscriptionDetails subscriptionDetails = gson.fromJson(String.valueOf(jsonObject.getJSONArray("subscriptionPlans")), SubscriptionDetails.class);
ArrayList<SubscriptionPlans> subscriptionPlans = subscriptionDetails.getSubscriptionPlans();

String amount = subscriptionPlans.get(0).getAmount();

however, I get the error response, java.lang.IllegalStateException:Expected BEGIN_OBJECT but was BEGIN_ARRAY at line column 2 path $

What I'm I missing or not doing correct here?

Boron
  • 99
  • 10
  • 34
  • 1
    Possible duplicate of https://stackoverflow.com/questions/9598707/gson-throwing-expected-begin-object-but-was-begin-array – A M Jan 18 '19 at 13:15

1 Answers1

3

pass to GSON the entire string, not just String.valueOf(jsonObject.getJSONArray("subscriptionPlans")):

SubscriptionDetails subscriptionDetails = gson.fromJson(String.valueOf(jsonObject), SubscriptionDetails.class);
Abhinav Gupta
  • 2,225
  • 1
  • 14
  • 30
user3118604
  • 854
  • 6
  • 12