因此,当我从应用程序处理多个类型的响应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()
3 回答
是的,是什么让错误是你的响应字段(结果),它是不同的类型 . 但是你只需使用第一种类型
Response(val error: List<String>, val result:LinkedTreeMap<String, List<List<Result>>>
接收所有的json .在我看来,你可以用以下方法来解决它 .
首先,重新定义你接收模型,也许你可以使用Gson JsonObject并在处理值时记住检查类型 .
其次,与你的后台服务器工程师讨论,同意每种类型的响应 . 可能是“field2”可以是“field2:[[]]”
接下来,更改您的模型 . 可以在下面定义它
希望能帮到你 .
你可以为filed1,filed2类型构建一个Gson
JsonDeserializer
.它是更手动编写的代码,但这样您可以检查字段的类型并调用正确的反序列化器 .
你的问题在这里:
你定义如下:
但不是那样你得到数字!
EDIT
试试这个: