ссылка на json
Вся проблема в chapters. по сути это гавнокод такие вещи надо в массиве добавлять. Но что есть то есть. Как мне этот Json сделать в Pojo (Gson). Таким образом чтобы chapters был в массиве, а не как 5 отдельных объектов. Так как они всегда динамические.
А эту модель я хочу использовать для всех запросов такого типа.
Я знаю что надо как то chapters добавить в List<> или HashMap
Можно написать свой JsonDeserializer<Chapter[]>, который будет считывать json в Map<String, Chapter> (где Chapter это класс, представляющий главу), а затем этот Map преобразовывать в Chapter[] (используя методы Map::values и Collection::toArray).
Например, если json выглядит примерно так:
{
"chapters": {
"5767ab95-8ab0-490b-8c08-cd4963567f75": {
"title": "Welcome"
},
"2eec0125-1613-4ed7-81b5-c10b55ba3e3d": {
"title": "Understanding the Rules of the Game"
},
"21e66272-76bc-4586-a02f-c64bdaad9d4f": {
"title": "Understanding Personality "
}
}
}
то можно написать такой код:
static class Chapter {
String title;
// остальные поля
}
static class Data {
Chapter[] chapters;
// остальные поля
}
static class ChapterArrayAdapter implements JsonDeserializer<Chapter[]> {
@Override
public Chapter[] deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
// получаем тип для Map<String, Chapter>
Type mapType = new TypeToken<Map<String, Chapter>>() {}.getType();
// десериализуем Map<String, Chapter>
Map<String, Chapter> map = context.deserialize(json, mapType);
// преобразуем в массив
return map.values().toArray(new Chapter[0]);
}
}
public static void main(String[] args) throws Exception {
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Chapter[].class, new ChapterArrayAdapter());
Gson gson = builder.create();
Data data = gson.fromJson(new FileReader("data.json"), Data.class);
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости