2013-04-12 5 views
0

Я использую gson для разбора ответа JSON. Код отлично подходит для надлежащего ответа JSON. Однако, если ответ JSON пустой массив, мой код продолжает жаловаться «Ожидал begin_object но получил end_array»Разбор пустой массив Json с использованием gson

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 
} 

Я знаю, что значит, что выше исключение, это просто означает, что он ожидал, что объект внутри массива будет обработан. Но поскольку это пустой массив, он дает исключение.

Но я посмотрел на руководство апи, и нет никаких методов, чтобы проверить, является ли JSON является пустой массив или следующий объект в входном потоке объект или конец массива и т.д.

Может ли одно сказать мне такие методы существуют в GSON API. Или как мы можем справиться с этой проблемой?

EDIT: Я изменил ответ, который я получил от сервера.

+0

надеюсь, что это поможет: http://stackoverflow.com/questions/12380927/deserializing-an-object-that-contains-json-using-gson –

+0

Вы уверены, что ответ JSON '{[]}'? Потому что это неправда JSON ... что-то вроде этого: '{" list ": []}' звучит лучше ... если это последнее, я могу вам помочь ... – MikO

+0

Да. Поставщик JSON изменил ответ от сервера. Я отредактировал оригинальную запись –

ответ

1

Вы уже используете соответствующий метод. Это JsonReader.hasNext() метод, как описано в JsonReader class docs:

В обработке массивов методов, сначала вызвать beginArray() к потреблению открывающей скобки в массива. Затем создайте цикл while, который накапливает значения , заканчивая, когда hasNext() является ложным. Наконец, прочитайте закрывающий скоб массива, вызвав endArray().

Вам просто нужно переключиться с цикла do/while на while. Ваш текущий код требует там всегда быть хотя бы одним объектом в массиве, потому что do/while не проверяет условие до конца цикла.

+0

Argh !!! Да, как я мог быть таким глупым и пропустить что-то вроде этого? –

Смежные вопросы