Как я могу десериализовать это? - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть ответ JSON на вызов API REST, в котором я не совсем уверен, как мне следует десериализовать ...

{
.....
"date": "10-10-19", 
"rates": {
    "GBP" : 101.01,
    "EUR" : 102.01,
    "AUD" : 103.4,
    ......
    }
}

Я хотел бы знать, как я могу десериализовать объект "ставок"?,Я думаю, что это был объект Map, поэтому с помощью Gson я делаю следующий POJO:

class POJO(
private val base: String,
private val date: Date,
private val rates: Rate
)

И мой класс Rate

class Rate ( private val currency : Map <String, Double> )

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

view?.converterBinder!!.setCurrencyList(it.data!!.rates.currency)

валюта равна нулю, потому что я думаю, что Гсон не знает, как ее разрешить.Я не знаю, пришлось ли мне десериализовать его вручную или есть какое-то решение для этого с помощью Gson.

Есть мысли ??

1 Ответ

0 голосов
/ 23 сентября 2019

Указанный Json полностью неверен, вот как он должен быть отформатирован

{
    "date": "10-10-19",
    "rates": {
        "GBP": 101.01,
        "EUR": 102.01
    }
}

Пожалуйста, проверьте с помощью https://jsonlint.com, чтобы подтвердить действительность Json.

Таку вас есть объект json со строкой «date», затем у вас есть другой объект json с именем «rate», содержащий 2 числовых двойных типа «GBP» и «EUR».

Каждый Json должен быть представлен классом, поэтомучтобы разобрать его, создайте следующий объект, содержащий 2 класса

object Models {

    data class Rates(@SerializedName("GBP") val gbp: Double,
                     @SerializedName("EUR") val eur: Double)

    data class ExchangeRates(@SerializedName("date") val date: String,
                             @SerializedName("rates") val rates: Rates)
}

Теперь вы передаете класс ExchangeRates в Gson для десериализации вашего объекта, и у вас должны быть все данные на месте.

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