一尘不染

如何使用杰克逊反序列化到Kotlin集合

json

我想要的示例代码:

data class D(val a: String, val b: Int)
val jsonStr = """[{"a": "value1", "b": 1}, {"a": "value2", "b":"2}]"""
// what I need
val listOfD: List<D> = jacksonObjectMapper().whatMethodAndParameter?

阅读 225

收藏
2020-07-27

共1个答案

一尘不染

使用Jackson Kotlin Module 当前版本,如果您导入完整的模块包或特定的扩展功能,则将提供所有扩展方法。如:

import com.fasterxml.jackson.module.kotlin.*  
val JSON = jacksonObjectMapper()  // keep around and re-use
val myList: List<String> = JSON.readValue("""["a","b","c"]""")

因此,用于Kotlin的Jackson模块将推断出正确的类型,并且您不需要TypeReference实例。

因此,您的情况(稍微重命名并修复了数据类和JSON):

import com.fasterxml.jackson.module.kotlin.readValue

data class MyData(val a: String, val b: Int)
val JSON = jacksonObjectMapper()

val jsonStr = """[{"a": "value1", "b": 1}, {"a": "value2", "b": 2}]"""
val myList: List<MyData> = JSON.readValue(jsonStr)

您也可以使用以下形式:

val myList = JSON.readValue<List<MyData>>(jsonStr)

如果没有导入,则会出现错误,因为找不到扩展功能。

2020-07-27