jlleitschuh
09/12/2018, 7:15 PM@Test
fun `loading using jackson`() {
val raw = loadLargeInputStream().readToString()
val mapper = jacksonObjectMapper()
val value = LOGGER.timeLogAndReturnValue("Reading in using Jackson") {
mapper.readValue<Map<String, Any>>(raw)
}
val test = LOGGER.timeLogAndReturnValue("Convert to Klaxon Json") {
json {
convertMap(value)
}
}
}
fun KlaxonJson.convertMap(map: Map<String, *>): JsonObject {
val pairs =
map
.mapNotNull { entry ->
val valueConverted = convertValue(entry.value)
valueConverted?.let { entry.key to it }
}
.toTypedArray()
return obj(*pairs)
}
fun KlaxonJson.convertArray(array: Collection<*>): JsonArray<*> {
val elements =
array.map { convertValue(it) }
return array(elements)
}
fun KlaxonJson.convertValue(value: Any?): Any? {
return when (value) {
is String -> value
is Collection<*> -> convertArray(value)
is Map<*, *> -> convertMap(value as Map<String, *>)
null -> null
else -> value
}
}
15:14:37.951 [main] INFO c.p.f.c.schema.LargeJsonTest - Starting: Reading in using Jackson
15:14:41.274 [main] INFO c.p.f.c.schema.LargeJsonTest - Time Taken Reading in using Jackson In Milliseconds = 3315
15:14:41.275 [main] INFO c.p.f.c.schema.LargeJsonTest - Starting: Convert to Klaxon Json
15:14:47.013 [main] INFO c.p.f.c.schema.LargeJsonTest - Time Taken Convert to Klaxon Json In Milliseconds = 5738