Created
November 3, 2016 12:00
-
-
Save bastman/0be4a689ffc2a61969108c6ff7cf93fa to your computer and use it in GitHub Desktop.
Json Encoder/Decoder for kotlin-lang (wraps jackson)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.seb.util | |
import com.fasterxml.jackson.core.type.TypeReference | |
import com.fasterxml.jackson.databind.ObjectMapper | |
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper | |
import java.util.HashMap | |
object JsonUtil { | |
fun jackson():ObjectMapper { | |
return jacksonObjectMapper() | |
} | |
fun jacksonEncode(data:Any):String { | |
val mapper= jacksonObjectMapper() | |
return mapper.writeValueAsString(data) | |
} | |
inline fun <reified T> jacksonDecode(json: String): T { | |
return jacksonObjectMapper() | |
.readValue(json, object : TypeReference<T>(){}) | |
} | |
fun <T>jacksonDecode(json:String, valueType: Class<T>):T { | |
val mapper= jacksonObjectMapper() | |
return mapper.readValue(json, valueType) | |
} | |
fun encode(data:Any):String { | |
return jacksonEncode(data) | |
} | |
fun decode(json:String):Any { | |
val mapper= jacksonObjectMapper() | |
if (json.trim() == "null") { | |
return Unit | |
} | |
arrayListOf( | |
{ txt: String -> mapper.readValue(txt, HashMap::class.java) }, | |
{ txt: String -> mapper.readValue(txt, List::class.java) }, | |
{ txt: String -> mapper.readValue(txt, Number::class.java) }, | |
{ txt: String -> mapper.readValue(txt, Boolean::class.java) }, | |
{ txt: String -> mapper.readValue(txt, String::class.java) } | |
).forEach { | |
try { | |
return it.invoke(json) | |
} catch (all: Throwable) { | |
} | |
} | |
throw RuntimeException("Failed to decode json") | |
} | |
} | |
data class MyData(val a: String, val b: Int) | |
fun main(args: Array<String>) { | |
val jsonStr = """ | |
{"a": "value1", "b": 1} | |
""" | |
val d1:MyData =JsonUtil.jacksonDecode(jsonStr, MyData::class.java) | |
val d1:MyData =JsonUtil.jacksonDecode(jsonStr) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment