首页 > 解决方案 > 我怎样才能反序列化这个?

问题描述

我有一个 API REST 调用的 JSON 响应,我不太确定应该如何反序列化...

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

我想知道如何反序列化“rates”对象?我认为这是一个 Map 对象,所以使用 Gson 我制作了下一个 POJO:

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

我的费率课程是

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

除非我尝试在课堂上使用此地图,否则不会有任何问题。例如,当我尝试访问此变量时:

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

货币为空,因为我认为 Gson 不知道如何解决它。我不知道我是否必须手动反序列化它,或者有任何使用 Gson 的解决方案。

有什么想法吗??

标签: androidjsonkotlinserializationgson

解决方案


提供的Json是完全错误的,应该是这样格式化的

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

请检查https://jsonlint.com以确认 Json 的有效性。

因此,您有一个带有字符串“日期”的 json 对象,然后您有另一个名为“rates”的 json 对象,其中包含 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 以反序列化您的对象,并且您应该拥有所有数据。


推荐阅读