Home > Enterprise >  Is there a way to deserialize Json into Kotlin data class and convert property types?
Is there a way to deserialize Json into Kotlin data class and convert property types?

Time:06-08

I have some json

{ 
    "name": "Foo",
    "age": 12,
    "id": "1234567890"
}

Currently, my data class I want to deserialize into looks like this

data class Example( val name: String, val age: Int, val id: String)

Is there a way to simply have the data class as

data class Example( val name: String, val age: Int, val id: Long)

Attention to the id type Long

I suppose this can be achieved through the use of an extension function that parses the data class into a separate data classes.

But I'd like to know if this is possible in any other way. I'm using Jackson for deserialization.

CodePudding user response:

You don't have to do anything. Jackson automatically converts the String into a Long if it is possible:

import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue

data class C(
    val s: String,
    val n: Long
)

fun main() {
    val json = """{"s":"My string","n":"1234567890"}"""

    val mapper = jacksonObjectMapper()
    val c: C = mapper.readValue(json)
    println(c)  // prints "C(s=My string, n=1234567890)"
}
  • Related