gpt4 book ai didi

java - jackson kotlin - 无法从 START_OBJECT token 中反序列化 `java.util.ArrayList` 的实例

转载 作者:行者123 更新时间:2023-12-02 12:34:12 26 4
gpt4 key购买 nike

我从 Fitbit API 获取一个 json 字符串。我想将日期时间和值字段保存在 List 对象中。我正在使用 jackson 模块 kotlin。我为此创建了 ActivitiesSteps 数据类。

我不知道如何避免“activities-steps”字段,我卡住了。

这是 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)

这是我使用 jackson 的代码:

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]

最佳答案

您需要有一个匹配 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 一起工作也很好,除非你真的想改变这些值。

关于java - jackson kotlin - 无法从 START_OBJECT token 中反序列化 `java.util.ArrayList` 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50475405/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com