All Downloads are FREE. Search and download functionalities are using the official Maven repository.

tech.harmonysoft.oss.jackson.JsonHelper.kt Maven / Gradle / Ivy

There is a newer version: 3.5.0
Show newest version
package tech.harmonysoft.oss.jackson

import com.fasterxml.jackson.databind.ObjectMapper
import javax.inject.Named

@Named
class JsonHelper(
    @Json private val mapper: ObjectMapper
) {

    fun byPath(json: String): Map {
        val asMap = mapper.readValue(json, Map::class.java)
        val result = mutableMapOf()
        for ((key, value) in asMap) {
            if (value is Map<*, *> || value is Collection<*>) {
                fill(result, key.toString(), value)
            } else if (value != null) {
                result[key.toString()] = value
            }
        }
        return result
    }

    private fun fill(holder: MutableMap, path: String, value: Any?) {
        when {
            value is Map<*, *> -> value.forEach { key, v ->
                fill(holder, "$path.$key", v)
            }
            value is Collection<*> -> value.forEachIndexed { i, v ->
                fill(holder, "$path[$i]", v)
            }
            value != null -> holder[path] = value
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy