我正在尝试使用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而不会失败。
答案 0 :(得分:1)
您的datapoints
元素不是JSON对象,它们是JSON数组,看似由JSON数字和JSON空值组成。
[
12345678,
null
],
您无法(默认情况下)将其映射到Datapoint
POJO。你可以改为
Integer[][] datapoints;