【问题标题】:Parse map with dynamic keys with Klaxon使用 Klaxon 使用动态键解析地图
【发布时间】:2019-06-18 14:35:11
【问题描述】:

我有以下 JSON sn-p:

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

我想用 Klaxon 和 Gson 将 streamQualitySettings 解析为一个名为“Option”的对象,该对象有一个键和描述,以便我以 3 个选项的列表结束

  • Option(key = SD, description = "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))
}

【问题讨论】:

    标签: kotlin gson klaxon


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-14
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 2020-07-28
      • 2018-12-25
      • 1970-01-01
      相关资源
      最近更新 更多