将JSON文件读取到对象Kotlin

时间:2018-10-18 18:06:42

标签: json kotlin jackson document

如何读取JSON文件,然后将其放入MongoDB的@Document-模型中定义的对象中。 我正在寻找Java中的杰克逊对象映射器之类的东西。这在这里不起作用,因为Documen-模型没有空的构造函数。

@Document(collection = "XXX")
 class Room(@Id
            private val id: String?,
            private val name: String){there is toString() method}


class Application{

@Bean
fun imageProcess(repo: MongoRepository) = CommandLineRunner {

    println("----------------Save customers!")


    for (room in read("C:/Users/Desktop/new.json")) {
        repo.save(room)
    }

}

val mapper = ObjectMapper().registerModule(KotlinModule())

fun read(path: String): Array<Room>? {

var temp: Array<Room>? = null
try {
    temp = mapper.readValue(File(path), Array<Room>::class.java)
} catch (ex: IOException) {
    ex.printStackTrace()
}

return temp

}

1 个答案:

答案 0 :(得分:1)

Jackson应该与以下模块配合使用:https://github.com/FasterXML/jackson-module-kotlin

“以前,在Kotlin对象上必须存在一个默认的构造函数,Jackson才能反序列化到该对象中。使用此模块,可以自动使用单个构造函数类,并且还支持那些具有辅助构造函数或静态工厂的类。” >

import com.fasterxml.jackson.module.kotlin.*

data class MyStateObject(val name: String, val age: Int)

...
val mapper = jacksonObjectMapper()

val state = mapper.readValue<MyStateObject>(json)
// or
val state: MyStateObject = mapper.readValue(json)
// or
myMemberWithType = mapper.readValue(json)