Gson: десериализация объектов, которые могут быть одним объектом или массивом.Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Gson: десериализация объектов, которые могут быть одним объектом или массивом.

Сообщение Anonymous »

Я использую Gson для анализа ответа JSON от определенного API.
Все работало нормально, но теперь кажется, что одно из полей ответа может иметь форму массива или форму одного элемента, так что я получаю com.google.gson.JsonSyntaxException: java.lang.IllegalStateException:

Здесь вы можете увидеть фрагмент двух версий JSON, вызывающий проблемы:

ВЕРСИЯ 1

Код: Выделить всё

{
"Notes": {
"Note": [
{
"key": "disruption-message",
"section": "high",
"priority": "1",
"message": "The battery consumption raised suddenly."
},
{
"key": "disruption-message",
"section": "low",
"priority": "2",
"message": "The power on the converter might be too high."
}
]
}
}
ВЕРСИЯ 2

Код: Выделить всё

{
"Notes": {
"Note": {
"key": "medium",
"section": "low",
"priority": "1",
"message": "Life time for the battery will expire soon"
}
}
}
Для анализа ВЕРСИИ 1 я использую следующий класс:

Код: Выделить всё

public class Notes implements Serializable {

@SerializedName("Note")
@Expose
private List note = null;

public List getNote() {
return note;
}

public void setNote(List note) {
this.note = note;
}

}
Это работает с ВЕРСИЕЙ 1, но когда обнаруживается часть ответа JSON, соответствующая ВЕРСИИ 2, конечно дает:

Код: Выделить всё

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT
Как заставить его десериализовать заметки, какой бы формат они ни имели?

Подробнее здесь: https://stackoverflow.com/questions/438 ... r-an-array
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»