Аннотация Котлина | Джексона | Как исправить ошибку токена START_ARRAY

#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
)