2016-09-23 3 views
0

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

"data": [ 
{ 
    "uuid": ".......", 
    "error": true, 
    "code": 142, 
    "text": "Invalid uuid" 
} 
] 

или

"data": { 
"download_url": "http://....." 
} 

для того, чтобы разобрать его в моем приложении я получить его с дооснащением как объект

public class downloadFileResponse extends generalStatusResponse { 
Object data; 

public Object getData() { 
    return data; 
} 
} 

и попытаться разобрать его, как это

if (response.getStatus().getCode().equals("136")) { 
        String res = new Gson().toJson(response.getData()); 
        try { 
         JSONObject t = new JSONObject(res); 
         Log.v("this", "r- " + t.getString("download_url")); 
        } catch (Exception e) { 

        } 
       } else { 
        try { 
         List<downloadFileDataErrorFields> error = new Gson().fromJson(response.getData().toString(), new TypeToken<List<downloadFileDataErrorFields>>() { }.getType()); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 

и мой объект downloadFileDataErrorFields это

public class downloadFileDataErrorFields { 
String uuid; 
String error; 
String code; 
String text; 

public downloadFileDataErrorFields() { 
} 

public String getUuid() { 
    return uuid; 
} 

public String getError() { 
    return error; 
} 

public String getCode() { 
    return code; 
} 

public String getText() { 
    return text; 
} 
} 

второй ответ только с DOWNLOAD_URL он работает нормально, но когда я пытаюсь разобрать первый с ошибками я получаю это

Caused by: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 87 path $[0].text 

в этом столбце есть пробел в строке «Invalid uuid».

Кто-нибудь знает, как это исправить? или правильно проанализировать различные типы ответов?

Спасибо

+1

Первый JSON не является действительным. –

ответ

0

Ваш первый пример JSON не список JSON, а объект JSON со списком, как ребенок.

Вы должны создать новый класс, представляющий эту структуру JSON, например:

public class DownloadFileDataError { 

private downloadFileDataErrorFields data; 

public DownloadFileDataError() { 
} 

public String getFields() { 
    return data; 
} 

} 

Тогда десериализации это так:

DownloadFileDataError error = new Gson().fromJson(response.getData().toString()); 
Смежные вопросы