GSON:java.lang.IllegalStateException:预期BEGIN_OBJECT但是BEGIN_ARRAY

时间:2014-04-24 16:59:51

标签: java json gson

我正在尝试使用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

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

1 个答案:

答案 0 :(得分:1)

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

[
    12345678,
    null
],

您无法(默认情况下)将其映射到Datapoint POJO。你可以改为

Integer[][] datapoints;