java - 卡在从 JSONObject 获取 JSONArray 上

标签 java android json

我有一个类似于以下内容的 JSON 响应:

还有一个 Subscription POJO 类,其中包含“subscriptionPlans”的 Arraylist:

SubscriptionDetails.java

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


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

@Override
public String toString() {
    return "SubscriptionDetails{" +
            "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;
}

我使用 Gson 从 JSON 获取数据并将其填充到各种 POJO 类中,如下所示:

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();

但是,我收到错误响应, java.lang.IllegalStateException:预期为 BEGIN_OBJECT,但在第 2 行列路径 $ 处为 BEGIN_ARRAY

我在这里错过了什么或做得不正确?

最佳答案

将整个字符串传递给 GSON,而不仅仅是 String.valueOf(jsonObject.getJSONArray("subscriptionPlans")):

SubscriptionDetails subscriptionDetails = gson.fromJson(String.valueOf(jsonObject), SubscriptionDetails.class);

关于java - 卡在从 JSONObject 获取 JSONArray 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54254733/

相关文章:

json - 在Elasticsearch中,有没有一种方法可以动态构建并传递JSON查询对象?

json - 从 Redshift 表中获取 JSON 数据

安卓命令列表

javascript - 如何使用 jQuery Grep 过滤极度嵌套的 JSON

java - 将dll添加到spring mvc项目中

java - Tapestry - 如何将参数从 tml 页面传递到 Tapestry 中的事件处理程序?

java - 向mysql插入数据后,Spark Java中显示的是IterableWrapper(非空迭代器)而不是String

Java Reflection - 参数数量错误;期望 0,得到 1

android - Android 上新 Activity 的默认动画名称是什么?

android - 在 Android 中使用 setShadowLayer() 复制图像