簡體   English   中英

GSON:java.lang.IllegalStateException:應為BEGIN_OBJECT,但應為BEGIN_ARRAY

[英]GSON : java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY

我正在嘗試使用gson解析以下json字符串,並且遇到此異常。

[{"target":"target 1","datapoints":[[12345678, null],[3456123,null],[908976712,12345677.0],[67543678, 4567.0]]}, {"target":"target 2","datapoints":[[12345678, 50215.0],[345645123,null],[908976712,null],[67543678, 4567.0]]}]

這是我的模型課:公制

public class Metric implements Serializable{
String target;
Datapoint[] datapoints;

//setters and getters
}

數據點

public class Datapoint implements Serializable{
long time;
long count;
//setters and getters
}

這就是我試圖使用gson解析json的方式

Gson gson = new GsonBuilder().create();
 JsonArray array = jsonParser.parse(jsonString).getAsJsonArray();
 for (JsonElement element : array) {
      Metric metric = gson.fromJson(element, Metric.class);
      //do something with the metric object. probably read all the datapoints and display
 }

這是拋出的異常

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY

很明顯的例外是,它期望一個對象(可能是數據點),但是遇到了一個數組。 我確定我的模型類是導致問題的那一個,但是我不明白我的模型類應該如何解析該json而不會失敗。

您的datapoints元素不是JSON對象,它們是JSON數組,看似由JSON數字和JSON空值組成。

[
    12345678,
    null
],

默認情況下,您將無法將其映射到Datapoint POJO。 您可以改為

Integer[][] datapoints; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM