java.lang.IllegalStateException:预期 BEGIN_ARRAY 但在路径 BEGIN_OBJECT
java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at path
我得到的响应是 JSON 对象或 JSON 相同的数组 api key.I 我正在使用 Gson 来解析数据,但是我得到了上面的错误,同时解析 json object.But 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 class
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;
}
}
更新计划class
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;
}
更新计划class
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;
}
}
您的 class 类型的 属性 mRenewalPlan 应该是 ArrayList 的对象 instaead。对象可以容纳两者。稍后您可以再次根据您的要求解析对象。
我得到的响应是 JSON 对象或 JSON 相同的数组 api key.I 我正在使用 Gson 来解析数据,但是我得到了上面的错误,同时解析 json object.But 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 class
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;
}
}
更新计划class
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;
}
更新计划class
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;
}
}
您的 class 类型的 属性 mRenewalPlan 应该是 ArrayList 的对象 instaead。对象可以容纳两者。稍后您可以再次根据您的要求解析对象。