Разбор карты с динамическими клавишами с помощью Klaxon - PullRequest
1 голос
/ 18 июня 2019

У меня есть следующий фрагмент JSON:

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

Я хочу проанализировать streamQualitySettings с Klaxon и Gson для объекта с именем 'Option', у которого есть ключ и описание, так что я заканчиваю спискомиз 3 опций

  • Опция (ключ = SD, описание = "SD - низкое качество")
  • Опция (ключ = HD720, описание = "Стандарт HD - 720p")
  • Опция (ключ = HD1080, описание = "Full HD - 1080p")

Как этого добиться с Клаксоном (или 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))
}

1 Ответ

1 голос
/ 18 июня 2019

Почему вы используете gson и klaxon?Если вы хотите использовать gson, то kotson - это альтернатива беглому kotlin dsl.

Вот решение с клаксоном:

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)!!) }
}

Parse, then move down to the `streamQualitySettings`.

Get all the keys and map them to `Option`.
...