当前位置: 首页 > 知识库问答 >
问题:

IllegalStateException:预期为BEGIN_OBJECT,但为BEGIN_ARRAY

申屠泳
2023-03-14

我试图使用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 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

异常很明显,它期待一个对象(可能是Datapoint),但它遇到了一个数组。我确信是我的模型类导致了这个问题,但是我不明白我的模型类应该是什么样子才能解析json而不会失败。

共有1个答案

韩智敏
2023-03-14

您的datapoints元素不是JSON对象,它们是JSON数组,似乎由JSON数字和JSON空值组成。

[
    12345678,
    null
],

您将无法(默认情况下)将其映射到datapointPOJO。您可以使用

Integer[][] datapoints; 
 类似资料: