例如,我们有这样的结构:
data class Item(
val city: String,
val name: String
)
val structure = mapOf("items" to listOf(
Item("NY", "Bill"),
Item("Test", "Test2"))
)
我想在Javascript中获取此对象:
var structure = {
"items": [
{
"city": "NY",
"name": "Bill"
},
{
"city": "Test",
"name": "Test2"
}
]
}
我们如何在Javascript中将map
从Kotlin转换为dynamic
类型的结构?
我只找到这种明确的方式:
fun Map<String, Any>.toJs(): dynamic {
val result: dynamic = object {}
for ((key, value) in this) {
when (value) {
is String -> result[key] = value
is List<*> -> result[key] = (value as List<Any>).toJs()
else -> throw RuntimeException("value has invalid type")
}
}
return result
}
fun List<Any>.toJs(): dynamic {
val result: dynamic = js("[]")
for (value in this) {
when (value) {
is String -> result.push(value)
is Item -> result.push(value.toJs())
else -> throw RuntimeException("value has invalid type")
}
}
return result
}
fun Item.toJs(): dynamic {
val result: dynamic = object {}
result["city"] = this.city
result["name"] = this.name
return result
}
我知道使用序列化/反序列化也可以做到这一点,但我认为它会更慢并且有一些开销。
有没有人知道将Kotlin object
转换为纯Javascript object
(dynamic
Kotlin类型)的简单方法?
答案 0 :(得分:0)
我可能不会真正理解你的问题所以请原谅我,如果这没有帮助。 就个人而言,我是使用Klaxon的粉丝: https://github.com/cbeust/klaxon
您可以编写自己的反射实用程序来迭代数据类中的所有属性并将它们转换为JSON。