Kotlin 使用Klaxon解析具有动态键的映射

Kotlin 使用Klaxon解析具有动态键的映射,kotlin,gson,klaxon,Kotlin,Gson,Klaxon,我有以下JSON片段: { "hd":{ "hdEnabled":true, "defaultStreamQualitySetting":"HD720", "streamQualitySettings":{ "SD":"SD - low quality", "HD720":"Standard HD - 720p", "HD1080":"Full HD - 1080p" }

我有以下JSON片段:

 {  
   "hd":{  
      "hdEnabled":true,
      "defaultStreamQualitySetting":"HD720",
      "streamQualitySettings":{  
         "SD":"SD - low quality",
         "HD720":"Standard HD - 720p",
         "HD1080":"Full HD - 1080p"
      }
   }
}
我想用Klaxon和Gson将streamQualitySettings解析为一个名为“Option”的对象,该对象有一个键和描述,这样我就可以用一个包含3个选项的列表结束了

  • 选项(key=SD,description=“SD-低质量”)
  • 选项(key=HD720,description=“标准HD-720p”)
  • 选项(key=HD1080,description=“全高清-1080p”)
我如何通过Klaxon(或Gson)实现这一点

这是我的密码

val jsonArray = bootstrapJsonObject()
          .lookup<JsonArray<JsonObject>>("hd.streamQualitySettings")
          .first()

val gson = Gson()
val options = ArrayList<Option>()
jsonArray.forEach {
    options.add(gson.fromJson(it.toJsonString(), Option::class.java))
}
val jsonArray=bootstrapJsonObject()
.lookup(“hd.streamQualitySettings”)
.first()
val gson=gson()
val options=ArrayList()
jsonArray.forEach{
add(gson.fromJson(it.toJsonString(),Option::class.java))
}

为什么同时使用gson和klaxon?如果您想使用gson,那么kotson是一个具有流畅kotlin dsl的替代方案

以下是klaxon的解决方案:

fun convert(input: String): List<Option> {
    val streamObj = (Parser.default().parse(StringBuilder(input)) as JsonObject)
        .obj("hd")!!
        .obj("streamQualitySettings")!!
    return streamObj.keys.map { Option(it, streamObj.string(it)!!) }
}

fun转换(输入:字符串):列表{
val streamObj=(Parser.default().parse(StringBuilder(输入))作为JsonObject)
.obj(“hd”)!!
.obj(“流质量设置”)!!
返回streamObj.keys.map{Option(it,streamObj.string(it)!!)}
}
解析,然后向下移动到
streamQualitySettings

获取所有键并将它们映射到
选项