Парсинг GSON, если имя класса не совпадает с именем в JSON

136
01 ноября 2019, 19:20

Как правильно реализовать это через gson. Есть класс Shop, а есть json который выглядит так. Чтобы сопоставить поля есть аннотация @SerializedName. А вот как сделать если имя класса не совпадает с именем объекта в JSON? Есть ли какие-либо аннотации. Или делать класс обертку Data?

{ 
  "data": { 
    "products": [ 
      { 
        ... 
      } 
    ], 
    "departments": [ 
      { 
        ... 
      } 
    ] 
  } 
}

Answer 1

Имя класса не обязательно должно совпадать с именем объекта. На вашем примере:

{
  "data": {
    ...
  }
}

Должно соответствовать следующему классу

public class Root {
    @SerializedName("data")
    private Shop shop;
    ...
}
Answer 2

Библиотека GSON содержит мощнейший механизм кастомной сериализации/десериализации объектов - дженерик интерфейсы

public interface JsonSerializer<T> {
    JsonElement serialize(T var1, Type var2, JsonSerializationContext var3);
}

и

public interface JsonDeserializer<T> {
    T deserialize(JsonElement var1, Type var2, JsonDeserializationContext var3) throws JsonParseException;
}

Реализовав их и использовав при создании объекта GSON через билдер GsonBuilder, зарегистрировав адептор к типу класса;

new GsonBuilder().registerTypeAdapter(UrClass.class, new UrClassAdapter()).create()

Вы получите очень гибкий инструмент для всевозможных трансформаций представления вашего класса: от свертки параметров до преобразования типов, в том числе и изменения имён полей класса.

READ ALSO
connection - pool заполнен при попытке чтения истории?

connection - pool заполнен при попытке чтения истории?

Приложение на spring4+jaxb+jpa+hibernate-envers работающие с websphere и oracle11g

144
Как очистить историю чата в Telegram? (TelegramBots)

Как очистить историю чата в Telegram? (TelegramBots)

Я использую библиотеку https://githubcom/rubenlagus/TelegramBots

187
Суммирование вводимых чисел и выход с цикла словом

Суммирование вводимых чисел и выход с цикла словом

Задача такова: вводи числа с клавиатуры, плюсуй их, при написании слова "сумма" выводить суммуКомпилится, запускается, но после ввода слова,...

156
digest авторизация (rtsp) vlc

digest авторизация (rtsp) vlc

День добрыйПри запросе по протоколу rtsp к камере сервер требует digest-авторизацию

267