【发布时间】:2019-07-22 06:47:44
【问题描述】:
我有一个 Json 格式,例如:
{
"kind": "prediction",
"command": "true",
"logs": [{
"time_log": "12:00",
"date": "2019-07-17",
"prices": [{
"state": "past",
"count": "128"
}, {
"state": "present",
"type": "255"
}, {
"state": "future",
"count": "300"
}]
}, {
"time_log": "12:00",
"date": "2019-07-18",
"prices": [{
"state": "past",
"count": "255"
}, {
"state": "present",
"type": "308"
}, {
"state": "future",
"count": "400"
}]
}]
}
Kotlin 中表示解析数据的类是 Response(顶级 JSON)和其他类:
data class Response(
val kind: String,
val command: String,
val logs: List<Log>
)
data class Log(
val time_log: String,
val date: String,
val prices: List<Price>
)
data class Price(
val state: String,
val count: String
)
所以当我在没有反序列化器的情况下在 Gson 中正常解析 JSON 文件时,上面的代码可以正常工作。但是,我不希望 Log 类存储 Prices 的列表,因为我确定 prices 数组将仅包含 3 个元素,因此我想将它们中的每一个存储在Log类喜欢:
data class Log(
val time_log: String,
val date: String,
val past_price: Price,
val present_price: Price,
val future_price: Price
)
请问如何在 Gson 中做到这一点?我已经尝试了几个小时,但不知道该怎么做。我也不确定是否需要为 Response 类编写反序列化器,这似乎需要做很多工作,还是可以更轻松地完成?任何指针或建议将不胜感激。
【问题讨论】:
-
编写自定义反序列化器,并在 GSON 中注册。你可以用这种方式反序列化。
-
这是一篇文章:medium.com/@int02h/…
-
@BorLaze 这是杰克逊解决方案,而 OP 正在使用 Gson