Json到Kotlin数据类

有没有一种方法和/或库自动创建从Json Kotlin数据类,就像它在Scala Json.Spray中工作?

像这样的东西:

data class User(id: Int, name: String) class DataClassFactory(val json: String) { fun getUser(): User { //some reflection return User(10, "Kirill") } } fun main(args: Array): Unit { val json = "{id: 10, name: Kirill}" val usr = DataClassFactory(json).getUser() println(usr) } 

您可以使用Jackson模块为Kotlin轻松地从Jackson支持的任何格式(包括JSON)序列化/反序列化。 这是最简单的方法,并支持没有注释的Kotlin数据类。 请参阅https://github.com/FasterXML/jackson-module-kotlin以获取包含Maven和Gradle使用的最新信息的模块(您可以推断IVY并从Maven存储库下载JAR)

替代品存在,如Boon,但它没有对Kotlin(通常没有默认构造函数的问题)的具体支持,并使用一些不安全的直接访问内部JVM类的性能。 在这样做的时候,它可能会崩溃在某些虚拟机上,并且在你使用自定义序列化器/反序列化器从Kotlin扩展Boon的情况下,它会假设Kotlin中不存在的类(例如,String类被包装)看到核心转储。 恩赐快点,在使用之前要注意这些问题并先测试一下。

(注意:我是Jackson-Kotlin模块的创建者)

在Kotlin这是非常干净和容易的。

 import com.fasterxml.jackson.module.kotlin.* data class User(val id: Int, val name: String) fun main(args: Array) { val mapper = jacksonObjectMapper() val json = """{"id": 10, "name": "Kirill"}""" val user = mapper.readValue(json) println(user) } 

产生这个输出:

 User(id=10, name=Kirill) 

你只需要添加这个到你的pom.xml

   com.fasterxml.jackson.module jackson-module-kotlin 2.6.3-4  

为什么不使用Jackson或其他序列化程序? 它应该工作..

那么这是一个将JSON字符串转换成kotlin数据类的翻译器,它通过一个插件,看下一个 演示用法 https://plugins.jetbrains.com/plugin/9960-jsontokotlinclass

http://www.json2kotlin.com在线将您的json响应转换为kotlin数据类,而无需安装任何插件。 或者,您也可以生成gson注释。 (披露:我创建了这个工具)