我对Gson有点新鲜,我有以下格式的json: -
{
"schedulerName" : "Commodities-ETP_Trade_Entry-FO_TCP_OAS_ALSWP-COM_SLS_BZ",
"startRequestDate" : "29-06-2017 23:39:54.910",
"activeTestCasesCount" : 7,
"statusMap" : { "Assigned" : 2, "In execution" : 1, "Pending" : 4 },
"subTaskCount" : 12,
"subTasks" : [
{ "testCaseName" : "OAS-TCP-ALSWP-0035", "testCaseType" : "DealEntry", "activeTestCase" : false, "statuses" : [ "Excluded" ], "currentStatus" : "Excluded", "message" : "" },
{ "testCaseName" : "OAS-TCP-ALSWP-0036", "testCaseType" : "DealEntry", "activeTestCase" : true, "statuses" : [ "Pending", "Assigned", "In execution" ], "currentStatus" : "In execution", "message" : "" },
{ "testCaseName" : "OAS-TCP-ALSWP-0037", "testCaseType" : "DealEntry", "activeTestCase" : false, "statuses" : [ "Excluded" ], "currentStatus" : "Excluded", "message" : "" },
{ "testCaseName" : "OAS-TCP-ALSWP-0039", "testCaseType" : "DealEntry", "activeTestCase" : true, "statuses" : [ "Pending", "Assigned" ], "currentStatus" : "Assigned", "message" : "" },
{ "testCaseName" : "OAS-TCP-ALSWP-0074", "testCaseType" : "DealEntry", "activeTestCase" : false, "statuses" : [ "Excluded" ], "currentStatus" : "Excluded", "message" : "" },
{ "testCaseName" : "OAS-TCP-ALSWP-0111", "testCaseType" : "DealEntry", "activeTestCase" : true, "statuses" : [ "Pending" ], "currentStatus" : "Pending", "message" : "" },
{ "testCaseName" : "OAS-TCP-ALSWP-0113", "testCaseType" : "DealEntry", "activeTestCase" : false, "statuses" : [ "Excluded" ], "currentStatus" : "Excluded", "message" : "" },
{ "testCaseName" : "OAS-TCP-ALSWP-0148", "testCaseType" : "DealEntry", "activeTestCase" : true, "statuses" : [ "Pending" ], "currentStatus" : "Pending", "message" : "" },
{ "testCaseName" : "OAS-TCP-ALSWP-0185", "testCaseType" : "DealEntry", "activeTestCase" : true, "statuses" : [ "Pending" ], "currentStatus" : "Pending", "message" : "" },
{ "testCaseName" : "OAS-TCP-ALSWP-0222", "testCaseType" : "DealEntry", "activeTestCase" : false, "statuses" : [ "Excluded" ], "currentStatus" : "Excluded", "message" : "" },
{ "testCaseName" : "OAS-TCP-ALSWP-0259", "testCaseType" : "DealEntry", "activeTestCase" : true, "statuses" : [ "Pending" ], "currentStatus" : "Pending", "message" : "" },
{ "testCaseName" : "OAS-TCP-ALSWP-0296", "testCaseType" : "DealEntry", "activeTestCase" : true, "statuses" : [ "Pending", "Assigned" ], "currentStatus" : "Assigned", "message" : "" }
],
"schedulerStatus" : "In execution",
"lastStatusDate" : "29-06-2017 23:40:19.251"}
并拥有一个java类: - 包com.nab.testing.taf.config;
import java.util.List;
/**
*
* Created by vpathani on 30/06/2017.
*/
public class SmtStatus {
public class SubTasks {
private String testCaseName;
private String testCaseType;
private boolean activeTestCase;
private String currentStatus;
public String getTestCaseName() {
return testCaseName;
}
public void setTestCaseName(String testCaseName) {
this.testCaseName = testCaseName;
}
public String getTestCaseType() {
return testCaseType;
}
public void setTestCaseType(String testCaseType) {
this.testCaseType = testCaseType;
}
public boolean isActiveTestCase() {
return activeTestCase;
}
public void setActiveTestCase(boolean activeTestCase) {
this.activeTestCase = activeTestCase;
}
public String getCurrentStatus() {
return currentStatus;
}
public void setCurrentStatus(String currentStatus) {
this.currentStatus = currentStatus;
}
}
private String schedulerName;
private int activeTestCasesCount;
private int subTaskCount;
private SubTasks subTasks ;
private String schedulerStatus;
public String getSchedulerName() {
return schedulerName;
}
public void setSchedulerName(String schedulerName) {
this.schedulerName = schedulerName;
}
public int getActiveTestCasesCount() {
return activeTestCasesCount;
}
public void setActiveTestCasesCount(int activeTestCasesCount) {
this.activeTestCasesCount = activeTestCasesCount;
}
public int getSubTaskCount() {
return subTaskCount;
}
public void setSubTaskCount(int subTaskCount) {
this.subTaskCount = subTaskCount;
}
public String getSchedulerStatus() {
return schedulerStatus;
}
public void setSchedulerStatus(String schedulerStatus) {
this.schedulerStatus = schedulerStatus;
}
public SubTasks getSubTasks() {
return subTasks;
}
public void setSubTasks(SubTasks subTasks) {
this.subTasks = subTasks;
}
@Override
public String toString() {
return "SmtStatus{" +
"schedulerName='" + schedulerName + '\'' +
", activeTestCasesCount=" + activeTestCasesCount +
", subTaskCount=" + subTaskCount +
", subTasks=" + subTasks +
", schedulerStatus='" + schedulerStatus + '\'' +
'}';
}
}
我正在解析它: -
private static final Type STATUS_TYPE = new TypeToken<ArrayList<SmtStatus>>() { }.getType();
private static final Type STATUS_TYPE_Object = new TypeToken<SmtStatus>() { }.getType();
案例1:
List<SmtStatus> list = getGson().fromJson(result, STATUS_TYPE);
com.google.gson.JsonSyntaxException:java.lang.IllegalStateException: 预期BEGIN_ARRAY但在第1行第2列路径$
处是BEGIN_OBJECT
或
案例2:
List<SmtStatus> list = getGson().fromJson(result, STATUS_TYPE_Object );
java.lang.IllegalStateException:预期BEGIN_OBJECT但是 BEGIN_ARRAY在第1行第276行$ .subTasks
非常感谢任何帮助。
答案 0 :(得分:2)
使用第二种情况,但替换
private SubTasks subTasks ;
带
private List<SubTasks> subTasks ;
线索出现错误。
java.lang.IllegalStateException:预期BEGIN_OBJECT但在第1行第276行是BEGIN_ARRAY 路径$ .subTasks
鉴于你的java类,它期待一个名为subTasks的对象,但是找到了一个数组。
所以把它改成一个数组,你就是金子。
第一种情况可能是正确的,如果你最终解析一个SMTStatus数组