使用gson解析空的Json数组

时间:2013-04-12 07:08:29

标签: java json gson

我正在使用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中存在任何此类方法。或者我们如何解决这个问题?

编辑:我修改了从服务器获得的响应。

1 个答案:

答案 0 :(得分:1)

您已经在使用适当的方法了。这是JsonReader.hasNext()中描述的JsonReader class docs方法:

  

在数组处理方法中,首先调用beginArray()来使用   阵列的开口括号。然后创建一个累积的while循环   值,当hasNext()为false时终止。最后,阅读数组   通过调用endArray()来关闭括号。

您只需要从do / while切换到while循环。您当前的代码要求数组中始终至少有一个对象,因为do / while在循环结束之前不会检查条件。