android - 我怎样才能反序列化这个?
问题描述
我有一个 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 的解决方案。
有什么想法吗??
解决方案
提供的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 以反序列化您的对象,并且您应该拥有所有数据。
推荐阅读
- python - ValueError:输入数组应具有与目标数组相同数量的样本。找到 32 个输入样本和 128 个目标样本
- c# - 绑定到 ViewModel 和 CodeBehind 一个可重用的 UserControl
- admin-on-rest - 编辑而不传递 id 作为标识符
- c# - FluentAssertions 检查对象字段不相等?
- gradle - gradle - 仅下载 maven 依赖项的任务
- arrays - 如何为任意嵌套长度的嵌套数组指定返回类型?
- python - 如何使用正确版本的python(OSX)?
- c++ - 看似随机的结果并不总是随机的
- javascript - 如何解决 [object Object] 警报?
- javascript - 如何在定义模板之前重构可以上传图像的代码?