2013-02-27 2 views
0

Я пытаюсь использовать библиотеку Gson для анализа некоторых данных json. Ответ от сервера может быть любой из них:Обработка пользовательских ошибок Gson

результат успеха:

{myObject: {foo:"1", bar:"bleh"}} 

результат неисправности:

{error: {message:"invalid token", code:320} } 

Похоже Gson может обрабатывать только один тип возвращаемого значения, например, что-то например:

Gson gson = new Gson(); 
MyObject object = gson.fromJson(value, MyObject.class); 

Как я могу правильно проанализировать данные/(ошибку) из фида, используя t он, Гессон, и не просто выровнял JSON?

ответ

0

Спасибо @ Брайан. Я в конечном итоге просто разбор, как этот

JsonParser parser = new JsonParser(); 
    parser.parse(value).getAsJsonObject(); 

, а затем проверить, если узел ошибки присутствовал, так что я мог бросить исключение сервера. Если узел отсутствовал, то я использовал Gson оттуда.

Gson gson = new GsonBuilder().create(); 
    ArrayList<GridItemVo> list = gson.fromJson(value, new TypeToken<ArrayList<GridItemVo>>(){}.getType()); 
2

Поскольку вы не знаете, что вы собираетесь получать, очень сложно использовать что-то вроде Gson и deserialize для POJO. Фактически вы получаете объект с полем «myObject» или «error». Один из подходов - просто создать всеобъемлющий объект. Gson устанавливает любые поля, отсутствующие в null при разборе JSON, так что-то подобное будет работать нормально:

class JSONResponse { 
    private MyObject myObject; 
    private Error error; 

    static class MyObject { 
     String foo; 
     String bar; 
    } 

    static class Error { 
     String message; 
     int code; 
    } 

    public boolean isError() { 
     return error != null; 
    } 

    // Getters that access the fields of the objects 
    // ... 
} 
+0

спасибо! это довольно хорошее решение. Я закончил проверку ошибки вручную в json. – user123321

+0

Спасибо за ваш комментарий Брайан, я удалил свой пост. –

+0

если я получаю массив MyObject, это работает? я беспокоюсь о статической причине, что все объекты имеют одинаковое значение –

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