tgbotapi/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/JSON.kt

45 lines
1.3 KiB
Kotlin
Raw Normal View History

2018-12-26 08:07:24 +00:00
package com.github.insanusmokrassar.TelegramBotAPI.utils
2019-12-02 08:35:37 +00:00
import kotlinx.serialization.SerializationStrategy
2018-12-26 08:07:24 +00:00
import kotlinx.serialization.json.*
2019-12-02 08:35:37 +00:00
inline fun <T: Any> T.toJsonWithoutNulls(serializer: SerializationStrategy<T>): JsonObject = toJson(serializer).withoutNulls()
2018-12-26 08:07:24 +00:00
2019-12-02 08:35:37 +00:00
inline fun <T: Any> T.toJson(serializer: SerializationStrategy<T>): JsonObject = Json.nonstrict.toJson(
2019-02-21 06:21:33 +00:00
serializer,
this
2018-12-26 08:07:24 +00:00
).jsonObject
fun JsonArray.withoutNulls(): JsonArray {
return jsonArray {
forEach {
when (it) {
is JsonObject -> +it.withoutNulls()
is JsonArray -> +it.withoutNulls()
is JsonPrimitive -> +it
}
}
}
}
fun JsonObject.withoutNulls(): JsonObject {
return json {
forEach { (k, v) ->
when (v) {
is JsonObject -> k to v.withoutNulls()
is JsonArray -> k to v.withoutNulls()
!is JsonNull -> k to v
}
}
}
}
fun JsonObject.mapWithCommonValues(): Map<String, Any> = map {
(key, value) ->
key to when (value) {
is JsonPrimitive -> value.contentOrNull ?: value.booleanOrNull ?: value.doubleOrNull ?: value.floatOrNull ?: value.intOrNull
is JsonArray, is JsonObject -> value.toString()
is JsonNull -> null
}
}.toMap().mapNotNullValues()