我对 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"}
Run Code Online (Sandbox Code Playgroud)
并有一个 java 类:- package 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 + '\'' +
'}';
}
}
Run Code Online (Sandbox Code Playgroud)
我这样解析它:-
private static final Type STATUS_TYPE = new TypeToken<ArrayList<SmtStatus>>() { }.getType();
private static final Type STATUS_TYPE_Object = new TypeToken<SmtStatus>() { }.getType();
Run Code Online (Sandbox Code Playgroud)
情况1:
List<SmtStatus> list = getGson().fromJson(result, STATUS_TYPE);
Run Code Online (Sandbox Code Playgroud)
com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为 BEGIN_ARRAY,但在第 1 行第 2 列路径 $ 处为 BEGIN_OBJECT
或者
案例2:
List<SmtStatus> list = getGson().fromJson(result, STATUS_TYPE_Object );
Run Code Online (Sandbox Code Playgroud)
java.lang.IllegalStateException:预期为 BEGIN_OBJECT,但在第 1 行第 276 列路径 $.subTasks 处为 BEGIN_ARRAY
非常感谢任何帮助。
使用第二种情况,但替换
private SubTasks subTasks ;
和
private List<SubTasks> subTasks ;
线索就在错误中。
java.lang.IllegalStateException:预期为 BEGIN_OBJECT,但在第 1 行第 276 列路径 $.subTasks处为 BEGIN_ARRAY
给定您的 java 类,它需要一个名为 subTasks 的对象,但找到了一个数组。
所以把它改成数组,你就是金子了。
如果您最终解析 SMTStatus 数组,第一种情况可能是正确的
| 归档时间: |
|
| 查看次数: |
10650 次 |
| 最近记录: |