使用 Klaxon 解析带有动态键的地图
Parse map with dynamic keys with 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 - low quality")
- 选项(密钥=HD720,描述="Standard HD - 720p")
- 选项(密钥=HD1080,描述="Full HD - 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
。
我有以下 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 - low quality")
- 选项(密钥=HD720,描述="Standard HD - 720p")
- 选项(密钥=HD1080,描述="Full HD - 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
。