2014-09-07 4 views
6

Gibt es einen Weg und/oder eine Bibliothek, um automatisch eine Kotlin Data Klasse von Json zu erstellen, so wie es in Scala Json.Spray funktioniert?Json nach Kotlin Datenklasse

Etwas wie folgt aus:

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

Vielleicht finden Sie es interessant: http://youtrack.jetbrains.com/issue/KT-5672, [Kotlin-Modul für Jackson, unterstützt unveränderliche Objekte] (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_nav * 4antwort * 4tab * 4profile_ * 1% 2Egmp_7417237) – bashor

+0

Kannst du mir einen Link zu JAR-Datei ohne Maven schicken? – OZKA

+1

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

Antwort

1

Warum Jackson oder andere Serializer nicht? Es sollte funktionieren ..

5

Sie können das Jackson-Modul für Kotlin verwenden, um leicht von jedem von Jackson unterstützten Format (einschließlich JSON) zu serialisieren/deserialisieren. Dies ist der einfachste Weg und unterstützt Kotlin-Datenklassen ohne Anmerkungen. Siehe https://github.com/FasterXML/jackson-module-kotlin für das Modul, das die neuesten Informationen zur Verwendung von Maven und Gradle enthält (Sie können auch IVY ableiten und JARs aus den Maven-Repositories herunterladen)

Alternativen wie Boon existieren, aber es gibt keine spezifische Unterstützung für Kotlin (In der Regel gibt es ein Problem, wenn kein Standardkonstruktor vorhanden ist. Außerdem wird für die Leistung ein unsicherer direkter Zugriff auf interne JVM-Klassen verwendet. Dabei kann es auf einigen VMs abstürzen, und in Fällen, in denen Sie Boon von Kotlin mit benutzerdefiniertem Serializer/Deserializer erweitern, macht es Annahmen über die Klassen, die nicht in Kotlin wahr sind (die String-Klasse ist zum Beispiel umhüllt), die ich habe gesehen Core-Dump. Boon ist blitzschnell, sei vorsichtig und teste zuerst, bevor du es verwendest.

(Anmerkung: Ich bin der Schöpfer des Jackson-Kotlin Modul)

4

Das ist sehr sauber und einfach in 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) 
} 

erzeugt diese Ausgabe:

User(id=10, name=Kirill) 

Sie nur diese

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

Aktuelle Version ist '2.6.4-1' für Kotlin beta 4 –

+0

Link zu den 1- Seitendokumente für dieses Modul: https://github.com/FasterXML/jackson-module-kotlin –

0

http://www.json2kotlin.com konvertiert Ihre JSON-Antwort in Kotlin-Datenklassen online, ohne dass ein Plugin installiert werden muss. Optional können Sie auch Gson Annotationen generieren. (Disclosure: Ich habe dieses Dienstprogramm erstellt)

Verwandte Themen