提问人:Jake 提问时间:11/9/2023 更新时间:11/12/2023 访问量:43
将 JSON 数组反序列化为数据类或记录
Deserialize a JSON array to a data class or record
问:
给定此 JSON,
["answer", 42]
和伴随的课程,
data class JsonRow(val s: String, val n: Int)
如何使用 Jackson 将数组转换为类?
最小的可重现示例(这是在 Kotlin 中,但据我所知,Java 也存在同样的问题)
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue
import kotlin.test.Test
import kotlin.test.assertEquals
data class JsonRow(val s: String, val n: Int)
object Example {
@Test
fun example() {
// Given
val jsonArray = """["answer", 42]"""
val objectMapper = jacksonObjectMapper()
// When
val actual = objectMapper.readValue<JsonRow>(jsonArray)
// Then
val expected = JsonRow("answer", 42)
assertEquals(expected, actual)
}
}
测试失败,并显示:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `com.example.JsonRow` from Array value (token `JsonToken.START_ARRAY`) at [Source: (String)"["answer", 42]"; line: 1, column: 1]
答:
0赞
Jake
11/10/2023
#1
最简单的方法是使用 JsonFormat
注释将数据类的形状指定为 Array。
例如,添加此内容后,一切按预期工作
import com.fasterxml.jackson.annotation.JsonFormat
@JsonFormat(shape = JsonFormat.Shape.ARRAY)
data class JsonRow(val s: String, val n: Int)
评论