我试图将提供的字符串(JSON)转换为Map
{
"key": "thisIsMyKey",
"value": false
}
所以我使用GSON和这个小片段进行了转换:
return jsonMap?.let { Gson().fromJson(jsonMap, object : TypeToken<HashMap<String, Any>>() {}.type) }
我现在遇到的问题是以下示例,如果我想使用JSONObject传递值
{
"key": "thisIsMyKey",
"value": {
"title": "this is title"
}
}
它被转换为一个键和多个带有字符串的“任何”值,但在这种情况下,我希望该值不仅仅是一个条目
您可以通过将预期类型指定为Map来做到这一点
val result = jsonMap?.let {
Gson().fromJson<Map<String, JsonElement>>(jsonMap).mapValues { (_, v) -> deprimitivize(v) }
}
fun deprimitivize(e: JsonElement) = if (e is JsonPrimitive) e.getValue() else e
fun JsonPrimitive.getValue(): Any = when {
isBoolean -> asBoolean
isNumber -> asNumber
else -> asString
}
inline fun <reified T : Any> Gson.fromJson(json: String): T = fromJson(json, object : TypeToken<T>() {}.type)