2014-09-07 2 views
6

Есть ли способ и/или библиотека для автоматического создания класса данных Kotlin из Json, как это работает в Scala Json.Spray?Json to Kotlin Класс данных

Что-то вроде этого:

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) 
} 
+2

Может быть, вы найдете это интересным: http://youtrack.jetbrains.com/issue/KT-5672, [Котлин модуль для Джексона, поддерживая неизменные объекты] (HTTPS: //www.linkedin.com/groups/Kotlin-module-Jackson-supporting-immutable-7417237.S.5910775828316172289?trk=groups_most_popular-0-b-ttl&goback=%2Enpv_158961627_*1_*1_*1_*1_*1_*1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_nav * 4responsive * 4tab * 4profile_ * 1% 2Egmp_7417237) – bashor

+0

Можете ли вы отправить мне ссылку на файл jar без Maven? – OZKA

+1

http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22jackson-module-kotlin%22 – bashor

ответ

1

Почему бы не использовать Джексон или любой другой сериализатору? Он должен работать.

5

Вы можете использовать модуль Jackson для Kotlin для сериализации/десериализации легко из любого формата, поддерживаемого Jackson (включая JSON). Это самый простой способ и поддерживает классы данных Kotlin без аннотаций. См. https://github.com/FasterXML/jackson-module-kotlin для модуля, который включает в себя самую последнюю информацию для использования с Maven и Gradle (вы можете вывести IVY и загрузить JAR из репозиториев Maven)

Существуют альтернативы, такие как Boon, но у них нет конкретной поддержки для Kotlin (обычно проблема с отсутствием конструктора по умолчанию) и использует некоторый небезопасный прямой доступ к внутренним классам JVM для повышения производительности. При этом он может упасть на некоторые виртуальные машины, и в тех случаях, когда вы расширяете Boon из Kotlin с помощью специального сериализатора/десериализатора, он делает предположения о классах, которые не соответствуют действительности в Kotlin (например, класс String) видел свалку ядра. Boon светится быстро, просто будьте осторожны с этими проблемами и сначала проверьте перед использованием.

(примечание: Я являюсь создателем модуля Джексона-Котлин)

4

Это очень чистый и легкий в Котлин.

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) 
} 

производит этот выход:

User(id=10, name=Kirill) 

у вас есть только добавить это к вашему pom.xml

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

Текущая версия '2.6.4-1' для Kotlin beta 4 –

+0

Ссылка на 1- page docs для этого модуля: https://github.com/FasterXML/jackson-module-kotlin –

0

http://www.json2kotlin.com преобразует ваш ответ json в классы данных kotlin онлайн, без необходимости устанавливать какой-либо плагин. Кроме того, вы можете создавать аннотации gson. (Раскрытие информации: Я создал эту утилиту)

Смежные вопросы