我正在使用gson解析JSON回复。 该代码适用于正确的JSON响应。但是,如果JSON回复是空数组,我的代码一直在抱怨“期待begin_object但得到end_array”
JSON response
{
"list" : {
"data" : [
]
}
}
我的代码
try {
jsonReader.beginArray();
do{
jsonReader.beginObject();
while(jsonReader.hasNext()){
// Parse all data
jsonReader.endObject();
} while(jsonReader.hasNext());
jsonReader.endArray();
} catch (IOException e) {
//Exception
}
我知道上面的异常意味着什么,它只是意味着它期望数组内的对象进行处理。但由于它是一个空数组,因此它会产生异常。
但我查看了api指南,并且没有方法可以检查JSON是否为空数组或输入流中的下一个对象是对象还是数组末尾等。
任何人都可以告诉我GSON API中存在任何此类方法。或者我们如何解决这个问题?
编辑:我修改了从服务器获得的响应。
答案 0 :(得分:1)
您已经在使用适当的方法了。这是JsonReader.hasNext()
中描述的JsonReader class docs方法:
在数组处理方法中,首先调用beginArray()来使用 阵列的开口括号。然后创建一个累积的while循环 值,当hasNext()为false时终止。最后,阅读数组 通过调用endArray()来关闭括号。
您只需要从do / while切换到while循环。您当前的代码要求数组中始终至少有一个对象,因为do / while在循环结束之前不会检查条件。