«Точка» в JSON с помощью Gson на Android - PullRequest
0 голосов
/ 18 августа 2011

Я пытаюсь проанализировать фид JSON с помощью Gson в Android. Я знаю, что JSON действителен. Я подозреваю, что это потому, что формат такой:

 "Info":[
 {

"Id":"",
"Name":"",
"Description":"",
"Date":""
 }

Для того, чтобы разобрать это, мне нужно поставить точку. Пример: Info.Name

Как я могу сделать это в сериализованном DTO?

@SerializedName("Name")
public String name;

@SerializedName("Description")
public String desc;

@SerializedName("Date")
public String date;

Я пытался поставить "Инфо". перед каждым serializedName, но это тоже не сработало. Я также знаю, что мой метод синтаксического анализа JSON работает правильно, потому что он используется где-то еще с другим DTO. Но в этом разборе мне не нужно «ставить точки».

Может кто-нибудь помочь?

РЕДАКТИРОВАТЬ: Я перепробовал все, что вы, ребята, опубликовал, и ничего не работает. Ошибка говорит:

The JsonDeserializer failed to deserialize json object {"Info":[{".......

ВТОРОЕ РЕДАКТИРОВАНИЕ: Мне удалось избавиться от ошибки, но теперь она возвращает ноль. Ха-ха, сейчас чертовски расстроен!

Ответы [ 2 ]

0 голосов
/ 18 августа 2011

Я предполагаю, что фактический JSON, который вы принимаете, действителен, потому что приведенный вами пример - нет.В вашем примере JSON у вас есть "Info":[, но нет внешнего объекта, содержащего свойство "Info", которое является обязательным.Допустимый JSON будет:

{
 "Info": [
           {
             "Id":"",
             "Name":"",
             "Description":"",
             "Date":"",
           }
         ]
}

Это объект JSON, имеющий свойство «Информация», значение которого представляет собой список объектов.Этот список объектов содержит один объект, имеющий свойства «Id», «Name», «Description» и «Date», каждый из которых имеет пустые строковые значения.

Вот краткое руководство по использованию GSON для разбора фида JSON, такого как приведенный выше JSON:

Вам потребуется класс для представления элементов в списке:

public class InfoItem {
     public String Id;
     public String Name;
     public String Description;
     public String Date;
     public InfoItem() {}
}

И один для представления списка элементов:

public class InfoItemList extends LinkedList<InfoItem> {
    public InfoItemList() { super() };
}

Эта дополнительная сложность заключается в том, что GSON не может иначе получить тип универсальной коллекции из данных класса.

Иодин для представления общего сообщения JSON:

public class InfoMessage {
    public InfoItemList Info;
    public InfoMessage() {};
}

А затем просто:

gson.fromJson(jsonString, InfoMessage.getClass());

Если просто десериализовать коллекцию:

Type listType = new TypeToken<List<InfoItem>>() {}.getType();
gson.fromJson(jsonString2, listType);
0 голосов
/ 18 августа 2011

Объект Info является списком из-за []. Вы должны использовать следующий код для десериализации:

EDIT:

public class Info {
    // as in your question
    public String name;
    ...
}
public class Data {
    @SerializedName("Info")
    public List<Info> info;
}

Тогда просто используйте класс данных для десериализации вашего json.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...