使用 Klaxon 在 Kotlin 中解析包含枚举数组的 JSON
Parse JSON containing an array of enums in Kotlin with Klaxon
我是 Kotlin 的新手,正在尝试解析来自 JSON:
的枚举数组
val convertColor = object: Converter<Color> {
override fun toJson(value: Color): String? = when(value) {
Color.R -> "red"
Color.G -> "green"
Color.B -> "blue"
else -> null
}
override fun fromJson(jv: JsonValue): Color = when(jv.inside) {
"red" -> Color.R
"green" -> Color.G
"blue" -> Color.B
else -> throw IllegalArgumentException("Invalid Color")
}
}
enum class Color { R, G, B }
data class Root (val colors: Array<Color>)
然后我尝试用以下方法解析样本:
val klaxon = Klaxon().converter(convertColor)
val result = klaxon.parse<Root>("""
{
"colors": ["red", "green", "blue"]
}
""")
但是我得到这个运行时异常:
Exception in thread "main" java.lang.IllegalArgumentException: array element type mismatch
似乎转换器未应用于数组元素。
将 Array
替换为 List
即可,无论如何推荐:
data class Root(val colors: List<Color>)
我是 Kotlin 的新手,正在尝试解析来自 JSON:
的枚举数组val convertColor = object: Converter<Color> {
override fun toJson(value: Color): String? = when(value) {
Color.R -> "red"
Color.G -> "green"
Color.B -> "blue"
else -> null
}
override fun fromJson(jv: JsonValue): Color = when(jv.inside) {
"red" -> Color.R
"green" -> Color.G
"blue" -> Color.B
else -> throw IllegalArgumentException("Invalid Color")
}
}
enum class Color { R, G, B }
data class Root (val colors: Array<Color>)
然后我尝试用以下方法解析样本:
val klaxon = Klaxon().converter(convertColor)
val result = klaxon.parse<Root>("""
{
"colors": ["red", "green", "blue"]
}
""")
但是我得到这个运行时异常:
Exception in thread "main" java.lang.IllegalArgumentException: array element type mismatch
似乎转换器未应用于数组元素。
将 Array
替换为 List
即可,无论如何推荐:
data class Root(val colors: List<Color>)