【问题标题】:What is simple way to convert dynamically Kotlin/Js objects to plain javascript object?将 Kotlin/Js 对象动态转换为纯 javascript 对象的简单方法是什么?
【发布时间】:2018-06-03 21:53:28
【问题描述】:

例如,我们有这样的结构:

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"
    }
  ]
}

我们如何将 Kotlin 中的 map 转换为 Javascript 中具有这种结构的 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 objectdynamic Kotlin 类型)的简单方法吗?

【问题讨论】:

  • 也许 .asDynamic() ?
  • .asDynamic 仅将此值重新解释为 dynamic type 的值
  • @kurt 你找到什么了吗?

标签: javascript dynamic kotlin kotlin-js-interop


【解决方案1】:

我可能无法真正理解您的问题,如果这没有帮助,请见谅。 就个人而言,我是使用 Klaxon 的粉丝: https://github.com/cbeust/klaxon

您可以编写自己的反射实用程序来迭代数据类中的所有属性并将它们转换为 JSON。

【讨论】:

  • 谢谢,但这不是我需要的。我想获得具有上述结构但没有序列化/反序列化的纯 javascript 对象。我在帖子中指出了这种转变的一个例子。
猜你喜欢
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
  • 2020-01-10
  • 2013-02-01
  • 1970-01-01
  • 2016-12-19
  • 2021-07-03
  • 1970-01-01
相关资源
最近更新 更多