【问题标题】:jackson kotlin - Cannot deserialize instance of `java.util.ArrayList` out of START_OBJECT tokenjackson kotlin - 无法从 START_OBJECT 令牌中反序列化 `java.util.ArrayList` 的实例
【发布时间】:2018-11-01 16:16:13
【问题描述】:

我从 Fitbit API 获取一个 json 字符串。我想将 dateTime 和 value 字段保存在 List 对象中。我正在使用杰克逊模块 kotlin。我为此创建了 ActivitiesSteps 数据类。

我不知道如何避免“活动步骤”字段,我被卡住了。

这是 JSON 正文(在我下面的代码中的变量 'jsonSteps' 中提供到 readValue 方法):

  {  
   "activities-steps":[  
      {  
         "dateTime":"2018-04-17",
         "value":"11045"
      },
      {  
         "dateTime":"2018-04-18",
         "value":"14324"
      },
      {  
         "dateTime":"2018-05-16",
         "value":"11596"
      }
   ]
}

这是我保存数据的课程:

data class ActivitiesSteps(var dateTime: String, var value: String)

这是我使用杰克逊的代码:

val mapper = jacksonObjectMapper()
val stepsList = mapper.readValue<List<ActivitiesSteps>>(jsonSteps)

并抛出以下异常:

Exception in thread "main" com.fasterxml.jackson.databind.exc.MismatchedInputException: 
Cannot deserialize instance of `java.util.ArrayList` out of 
START_OBJECT token at 

[Source: (String)"{"activities-steps":[
{"dateTime":"2018-04-17","value":"11045"},
{"dateTime":"2018-04-25","value":"8585"},
{"dateTime":"2018-04-26","value":"11218"},
{"dateTime":"2018-04-27","value":"10462"},
{"dateTime":"2018-04"[truncated 762 chars]; line: 1, column: 1]

【问题讨论】:

    标签: java json kotlin jackson2


    【解决方案1】:

    您需要有一个与 JSON 顶层匹配的外部对象。在这种情况下,将您的代码更改为:

    data class ActivityConfig(
        @JsonProperty("activities-steps") val steps: List<ActivitiesSteps> = emptyList()
    )
    
    data class ActivitiesSteps(var dateTime: String, var value: String)
    
    val stepsList = mapper.readValue<ActivityConfig>(jsonSteps).steps
    

    如果您希望列表始终存在,您可以在 Jackson Kotin 模块中使用默认值,并且您也不需要数据类中的 var 成员,val 也可以与 Jackson 一起使用除非你真的想改变这些值。

    【讨论】:

      【解决方案2】:

      问题是您尝试获取的数组被包装在一个对象中,您将其输入杰克逊并要求返回一个列表。 JSON object-to-Java List 不是 Jackson 理解的翻译,所以令人窒息。

      我将创建一个包装该 List 的类并尝试反序列化。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-17
        • 2021-03-26
        • 2017-09-22
        • 2020-02-20
        • 2018-02-03
        • 2019-10-16
        相关资源
        最近更新 更多