java.lang.IllegalStateException:应为 BEGIN_ARRAY,但路径为 BEGIN_OBJECT
Posted
技术标签:
【中文标题】java.lang.IllegalStateException:应为 BEGIN_ARRAY,但路径为 BEGIN_OBJECT【英文标题】:java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at path 【发布时间】: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 字符串。
【参考方案1】:
属性 mRenewalPlan 的 RenewalPlans 类类型应该是对象而不是 ArrayList。对象可以同时容纳两者。稍后您可以再次根据您的要求解析对象。
【讨论】:
制作对象然后解析成功了。谢谢以上是关于java.lang.IllegalStateException:应为 BEGIN_ARRAY,但路径为 BEGIN_OBJECT的主要内容,如果未能解决你的问题,请参考以下文章