科特林 |杰克逊注解 |如何修复超出 START_ARRAY 令牌错误

Posted

技术标签:

【中文标题】科特林 |杰克逊注解 |如何修复超出 START_ARRAY 令牌错误【英文标题】:Kotlin | Jackson annotation | How to fix Out of START_ARRAY token Error 【发布时间】:2021-09-17 06:54:00 【问题描述】:

谁能说我哪里做错了。我有这样的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

【问题讨论】:

如果你解析为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
)

【讨论】:

以上是关于科特林 |杰克逊注解 |如何修复超出 START_ARRAY 令牌错误的主要内容,如果未能解决你的问题,请参考以下文章

如何压缩从科特林画廊挑选的照片

Android Room 库错误:找不到字段的设置器。 (科特林)

如何在流中使用来自另一个流数据的数据? (科特林流程)

如果 MutableList 为空,如何更改 TextView 的可见性? (安卓/科特林)

如何在firestore中检索当前auth用户的所有字段? - 科特林

如何在 for 循环中使用动态键值从 JSON 数组获取值?科特林