Tsudzukeru
@Tsudzukeru

Как добавить логику парсинга Json, не используя десериализатор?

Использую Retrofit для работы с Rest API.
Я знаю, что Gson содержит аннотации, с помощью которых можно вытягивать нужные нам данные из Json, но что если эти данные нужно предварительно обработать?
Например, мне нужно отформатировать дату, полученную из Json. Для этого в десериализаторе я использую вот такой код (и это только для одного поля из 10):

dataValue.entrySet()?.forEach { 
    if (it.key == "date_created") {
        Log.i(TAG, "date_created exists")

        val dateStr: String = it.value.asString
        val parsedDateFormat =
            SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX")

        val parsedDate: Date = parsedDateFormat.parse(dateStr)

        val dayDateFormat = SimpleDateFormat("dd")
        val day = dayDateFormat.format(parsedDate)

        val monthDateFormat = SimpleDateFormat("MMMM")
        val month = monthDateFormat.format(parsedDate)

        val yearDateFormat = SimpleDateFormat("yyyy")
        val year = yearDateFormat.format(parsedDate)

        dateCreated = "$month $day, $year"
}


В итоге код десериализатора получается достаточно громоздким и сложным для восприятия. Хочется от него избавиться и использовать аннотации. Но как их спользовать для решения подобных задач? На ум приходит создать дополнительные поля с lazy инициализацией, которые будут дергать необработанные поля и преобразовывать их в нужный формат, но тогда класс будет содержать много лишней информации и методов. Есть ли способы получше?
  • Вопрос задан
  • 68 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Android
Android developer at Yandex
Да, есть. не надо держать в данных отформатированные поля. Форматировать надо непосредственно перед использованием(например показе во вьюхе). Для этого должен быть отдельный слой, который занимается форматированием всех данных для показа(и это может быть не только форматирование текста).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы