Clase de Json a Kotlin Data

¿Hay alguna forma y / o biblioteca para crear automáticamente la class de Datos Kotlin de Json como funciona en Scala Json.Spray?

Algo como esto:

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<String>): Unit { val json = "{id: 10, name: Kirill}" val usr = DataClassFactory(json).getUser() println(usr) } 

Puede usar el module Jackson para que Kotlin serialice / deserialice fácilmente desde cualquier formatting compatible con Jackson (incluido JSON). Esta es la forma más fácil y es compatible con las classs de datos de Kotlin sin annotations. Vea https://github.com/FasterXML/jackson-module-kotlin para el module que incluye la información más reciente para usar de Maven y Gradle (también puede inferir IVY y download JAR de los repositorys Maven)

Existen alternativas como Boon, pero no tiene soporte específico para Kotlin (generalmente es un problema al no tener un constructor pnetworkingeterminado) y utiliza cierto acceso directo inseguro a las classs de JVM internas para el performance. Al hacerlo, puede bloquearse en algunas máquinas virtuales, y en los casos en que extiendes Boon de Kotlin con un serializador / deserializador personalizado, hace suposiciones sobre las classs que no son ciertas en Kotlin (la class String está empaquetada, por ejemplo) que tengo vertedero central visto. Boon se está aligerando rápidamente, solo tenga cuidado con estos problemas y pruébelos primero antes de usarlos.

(nota: soy el creador del module Jackson-Kotlin)

Esto es muy limpio y fácil en Kotlin.

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

produce esta salida:

 User(id=10, name=Kirill) 

solo tienes que agregar esto a tu pom.xml

  <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-kotlin</artifactId> <version>2.6.3-4</version> </dependency> 

¿Por qué no usar Jackson o cualquier otro serializador? Deberia de funcionar..

¿Qué pasa con esto? Este es un traductor que traduce la cadena JSON a la class de datos kotlin, lo hace a través de un complemento, ver siguiente un uso de demostración https://plugins.jetbrains.com/plugin/9960-jsontokotlinclass

http://www.json2kotlin.com convierte su respuesta json a las classs de datos de kotlin en línea, sin la necesidad de instalar ningún complemento. Opcionalmente, puede generar annotations gson también. (Divulgación: Creé esta utilidad)