kotlin - 使用 Klaxon 使用动态键解析 map

标签 kotlin gson klaxon

我有以下 JSON 片段:

 {  
   "hd":{  
      "hdEnabled":true,
      "defaultStreamQualitySetting":"HD720",
      "streamQualitySettings":{  
         "SD":"SD - low quality",
         "HD720":"Standard HD - 720p",
         "HD1080":"Full HD - 1080p"
      }
   }
}

我想用 Klaxon 和 Gson 将 streamQualitySettings 解析为一个名为“Option”的对象,该对象有一个键和描述,以便我以 3 个选项的列表结束
  • 选项(键 = SD,描述 =“SD - 低质量”)
  • 选项(键 = HD720,描述 =“标准高清 - 720p”)
  • 选项(键 = HD1080,描述 =“全高清 - 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))
    }
    

    最佳答案

    你为什么同时使用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)!!) }
    }
    
    

    解析,然后向下移动到 streamQualitySettings .

    获取所有键并将它们映射到 Option .

    关于kotlin - 使用 Klaxon 使用动态键解析 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56651552/

    相关文章:

    java - 从任何地方引用项目目录

    objective-c - Objective-C 中的 Gson 等价物

    android - 改造:应为 BEGIN_OBJECT 但为 STRING

    java - Gson最新版本中用什么来替换StringMap

    android - 在 Kotlin 上将 JSON 字符串解析为 JsonObject/Map/MutableMap

    websocket - Kotlin 和 WebSocket

    postgresql - 如何让 PostgreSQL DBLink 连接与 JDBC 一起工作?

    Android Kotlin + Klaxon - 解析 JSON 根数组

    json - 使用Klaxon解析Kotlin中包含嵌套列表的JSON

    kotlin - 基于函数式风格的谓词对列表的连续元素进行分区