【问题标题】:java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at pathjava.lang.IllegalStateException:应为 BEGIN_ARRAY,但路径为 BEGIN_OBJECT
【发布时间】:2020-11-15 22:18:17
【问题描述】:

我在同一个 api 键中得到 JSON 对象或 JSON 数组的响应。我正在使用 Gson 解析数据,但在解析 json 对象时出现上述错误。但 JSON 数组没问题。

使用 JSON 对象响应

    {
      "Code": "000",
      "Message": "Success",
      "RenewalPlans": {
        "RenewalPlan": {
          "PlanId": "123",
          "PlanName": "super plan",
          "PlanAmount": "6102"
        }
      }
    }

//json array
{
  "Code": "000",
  "Message": "Success",
  "RenewalPlans": {
    "RenewalPlan": [
      {
        "PlanId": "456",
        "PlanName": "super",
        "PlanAmount": "6102"
      },
      {
        "PlanId": "123",
        "PlanName": "Power plan",
        "PlanAmount": "123"
      }
    ]
  }
}

使用 Gson 解析数据

CustomerdetailsResponse customerDetailsResponse = new Gson().fromJson(new Gson().toJson(response), CustomerdetailsResponse.class);

CustomerdetailsResponse 类

public class CustomerdetailsResponse implements Serializable {
    @SerializedName("Code")
    @Expose
    private String mCode;
         

    @SerializedName("Message")
    @Expose
    private String mMessage

    @SerializedName("RenewalPlans")
    @Expose
    private RenewalPlans mRenewalPlans;
   
    public String getCode() {
        return mCode;
    }

    public void setCode(String code) {
        mCode = code;
    }

  
  

    public String getMessage() {
        return mMessage;
    }

    public void setMessage(String message) {
        mMessage = message;
    }

  

  

    public RenewalPlans getRenewalPlans() {
        return mRenewalPlans;
    }

    public void setRenewalPlans(RenewalPlans renewalPlans) {
        mRenewalPlans = renewalPlans;
    }

  

 

}

RenewalPlans 类

public class RenewalPlans implements Serializable {
    @SerializedName("RenewalPlan")
    @Expose

    private ArrayList<RenewalPlan> mRenewalPlan;

    public ArrayList<RenewalPlan> getRenewalPlan() {
        return mRenewalPlan;
    }

    public void setRenewalPlan(ArrayList<RenewalPlan> renewalPlan) {
        mRenewalPlan = renewalPlan;
    }

RenewalPlan 类

public class RenewalPlan implements Serializable {
    @SerializedName("PlanAmount")
    @Expose

    private String mPlanAmount;
    @SerializedName("PlanId")
    @Expose

    private String mPlanId;
    @SerializedName("PlanName")
    @Expose

    private String mPlanName;

    public String getPlanAmount() {
        return mPlanAmount;
    }

    public void setPlanAmount(String planAmount) {
        mPlanAmount = planAmount;
    }

    public String getPlanId() {
        return mPlanId;
    }

    public void setPlanId(String planId) {
        mPlanId = planId;
    }

    public String getPlanName() {
        return mPlanName;
    }

    public void setPlanName(String planName) {
        mPlanName = planName;
    }

}

【问题讨论】:

  • 请分享 CustomerdetailsResponse 类
  • 您能在我发布所需课程时查看我的问题吗? @ShaluTD
  • 问题来自服务设计,它应该以相同的方式提供响应(例如,始终将RenewalPlans 作为 json 数组返回)。我认为使用gson 你将无法解析这样的 json 字符串。

标签: android json parsing gson json-deserialization


【解决方案1】:

属性 mRenewalPlan 的 RenewalPlans 类类型应该是对象而不是 ArrayList。对象可以同时容纳两者。稍后您可以再次根据您的要求解析对象。

【讨论】:

  • 制作对象然后解析成功了。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-27
  • 2020-02-03
  • 2018-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多