android - Retrofit - Android - 使用 gson 处理多种类型的键和值
问题描述
因此,在处理来自响应 json 的键和值的多种类型时,我想从我的应用程序中使用的 api 遇到了一些问题。
让我向您展示 json 响应:
{
"error":[
],
"result":{
"field1":[
[
1544258160,
"57.15",
"57.15",
"57.15",
"57.15",
"0.00",
"0.00000000",
0
],
[
1544258220,
"56.89",
"56.89",
"56.89",
"56.89",
"56.89",
"2.94406281",
1
]
],
"field2":1544301240
}
}
这是 pojo 类的表示:
data class Response(val error: List<String>, val result: LinkedTreeMap<String, List<List<Result>>>)
data class Result(
val time: Double,
val open: String,
val high: String,
val low: String,
val close: String,
val vwap: String,
val volume: String,
val count: Double
)
我知道当前的结构无法代表 json 格式。但我已经没有想法了。
顺便说一句,堆栈错误是这样说的:
Expected BEGIN_OBJECT but was NUMBER
编辑:添加更多上下文
我将 Gsonconverter 用于改造构建器。
val retrofit = Retrofit.Builder().baseUrl(API_URL).client(client)
.addConverterFactory(GsonConverterFactory.create()).build()
解决方案
你的问题在这里:
"field2":1544301240
您定义如下:
val result: LinkedTreeMap<String, List<List<Result>>>
但你得到的不是那个数字!!!
编辑
试试这个:
data class Response(val error: List<String>, val result: YourModel)
data class YourModel(val field1: LinkedTreeMap<String, List<List<Result>>>, val field2: Double)
data class Result(
val time: Double,
val open: String,
val high: String,
val low: String,
val close: String,
val vwap: String,
val volume: String,
val count: Double
)
推荐阅读
- python - 在 python 中使用正则表达式删除部分字符串
- mongodb - 为什么我的 mongo 容器的 docker-compose 健康检查总是失败?
- format - 如何将用户提示的响应放入剪贴板(格式不同)
- css - 如何在 CSS 中使文本颜色变为蓝色?
- html - 将 div 内的 span 与 img 元素居中对齐
- python - 向 Python 类添加属性时如何更新腌制对象
- python - 生成具有已知种子值的随机数
- go - 将 *string 类型转换为 bson.ObjectId 类型
- javascript - 键入时如何为动态生成的输入添加动态值?
- python - 生成所有可能的“唯一”RPN(逆波兰表示法)表达式