WAQ*_*AQT 3 java json gson kotlin
我有一个像这样的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"
}]
}]
}
Run Code Online (Sandbox Code Playgroud)
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
)
Run Code Online (Sandbox Code Playgroud)
因此,当我在不使用反序列化程序的情况下在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
)
Run Code Online (Sandbox Code Playgroud)
请问如何在Gson中完成此操作?我已经尝试了几个小时,但不确定如何解决。我也不确定是否需要为Response该类编写一个似乎需要大量工作的反序列化器,或者可以更轻松地完成它?任何指示或建议,将不胜感激。
最好当然是更改API以更好地反映内容:如果价格清单实际上不是清单而是3个特定的价格,那么API首先应以这种方式返回价格清单。
如果您不控制API,一种避免自定义反序列化器复杂性的简单解决方案是保留列表,但添加一些属性以更方便地访问列表:
data class Log(
val time_log: String,
val date: String,
private val prices: List<Price>
) {
val pastPrice: Price
get() = prices[0]
val presentPrice: Price
get() = prices[1]
val futurePrice: Price
get() = prices[2]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
231 次 |
| 最近记录: |