ссылка на 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);
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В задании указано, что информация в консоль должна выводиться из message resource (впервые столкнулся)Программа изменяет язык в соответствии с раскладкой...
Есть класс реализующий это? Или документация?