#android #json #kotlin #parsing #jackson
Вопрос:
Может ли кто-нибудь сказать, где я поступаю неправильно. У меня есть такой json
[
{
"id": "1",
"name": "ff",
"surname": "ggg",
"cap": "10000"
},
{
"id": "1",
"name": "aaa",
"surname": "hhh",
"cap": "22222"
},
{
"id": "1",
"name": "rrr",
"surname": "hhhhhdr",
"cap": "33333"
},
{
"id": "1",
"name": "hhh",
"surname": "qqqqq",
"cap": "44444"
}
]
И я разбираю этот класс.
data class ResponseList(
val capList: List<Response>?
) {
data class Response(
@JsonProperty("id")
val id: String,
@JsonProperty("name")
val name: String,
@JsonProperty("surname")
val surname: String,
@JsonProperty("cap")
val cap: String
)
}
Когда я пытаюсь разобрать его, список всегда равен нулю, и если я попытаюсь его проверить, у меня будет эта ошибка:
Невозможно десериализовать значение типа com.myapp.ResponseList из значения массива (токена JsonToken.START_ARRAY
)
Комментарии:
1. Если вы проанализируете
ResponseList
, он будет ожидать, что ваш JSON будет чем-то вроде{ capList: [{id: "", name: "", surname: "", cap: ""}] }
.
Ответ №1:
требуется только ответ класса, например, следующий:
fun test(){
val jsonStr = "your json str"
val mapper = ObjectMapper()
val lendReco: List<Response> =
mapper.readValue(jsonStr, object : TypeReference<List<Response?>?>() {})
}
data class Response(
@JsonProperty("id")
val id: String,
@JsonProperty("name")
val name: String,
@JsonProperty("surname")
val surname: String,
@JsonProperty("cap")
val cap: String
)