我有一个简单的Kotlin程序,可以访问Mongo数据库并生成一个JSON字符串,如下所示;
"{
"_id" : { "$oid" : "593440eb7fa580d99d1abe85"} ,
"name" : "Firstname Secondname" ,
"reg_number" : "ATC/DCM/1016/230" ,
"oral" : 11 ,
"oral_percent" : 73 ,
"cat_1" : 57 ,
"cat_2" : 60 ,
"cat_average" : 59 ,
"assignment" : 90
}"
如何在Kotlin Map / MutableMap中映射? Kotlin中是否有API来读取JSON并将其映射到Map / MutableMap?
答案 0 :(得分:6)
可以使用Klaxon完成此操作。有了这个,您可以轻松地将 Json 数据读作JsonObject
,这实际上是MutableMap
。
val json: JsonObject = Parser().parse(jsonData) as JsonObject
答案 1 :(得分:5)
使用杰克逊的kotlin module,您可以创建一个Map / MutableMap,如下所示:
val jsonString = "{\n" +
" \"_id\": {\n" +
" \"\$oid\": \"593440eb7fa580d99d1abe85\"\n" +
" },\n" +
" \"name\": \"Firstname Secondname\",\n" +
" \"reg_number\": \"ATC/DCM/1016/230\",\n" +
" \"oral\": 11,\n" +
" \"oral_percent\": 73,\n" +
" \"cat_1\": 57,\n" +
" \"cat_2\": 60,\n" +
" \"cat_average\": 59,\n" +
" \"assignment\": 90\n" +
"}"
val map = ObjectMapper().readValue<MutableMap<Any, Any>>(jsonString)
注意:如果您遇到以下编译错误
None of the following functions can be called with the arguments supplied
请确保您已添加jackson-module-kotlin
的依赖项(对于gradle:compile "com.fasterxml.jackson.module:jackson-module-kotlin:${jackson_version}"
)并将 readValue 实现的导入添加为import com.fasterxml.jackson.module.kotlin.readValue
在您使用readValue
答案 2 :(得分:-1)
不需要其他库:
val jsonObj = JSONObject(jsonString)
val map = jsonObj.toMap()
toMap的位置:
fun JSONObject.toMap(): Map<String, *> = keys().asSequence().associateWith {
when (val value = this[it])
{
is JSONArray ->
{
val map = (0 until value.length()).associate { Pair(it.toString(), value[it]) }
JSONObject(map).toMap().values.toList()
}
is JSONObject -> value.toMap()
JSONObject.NULL -> null
else -> value
}
}