javascript - Kotlin JS JSON 反序列化

标签 javascript json kotlin

我在 javascript 平台上使用 kotlin。此代码在第六行失败,出现异常“Uncaught TypeError: a.c.iterator is not a function”。

class A(val b: String, val c: List<String>)

fun main(args: Array<String>) {
    val a = JSON.parse<A>("""{"b": "b_value", "c": ["c_value_1", "c_value_2"]}""")
    println(a.b)
    for (c in a.c) println(c)
}

在 javascript 调试器中,我可以看到,该对象“a”已反序列化。但我认为,它不是 A 类型的有效 kotlin 对象。无论如何,如何从对象“a”或原始 json 字符串创建 A 类型的有效 kotlin 对象实例?

最佳答案

你不应该使用 JSON.parse与常规的 Kotlin 类(class)。将其与外部接口(interface)一起使用,即:

external interface A(val b: String, val c: Array<String>)

fun main(args: Array<String>) {
    val a = JSON.parse<A>("""{"b": "b_value", "c": ["c_value_1", "c_value_2"]}""")
    println(a.b)
    for (c in a.c) println(c)
}

抱歉,这种限制无法通过 Kotlin 类型系统表达。

是的,正如@marstran 提到的,你不应该使用 List<T>在这种情况下,还有其他 Kotlin 集合。我们正在开发一个库,用于将 JSON 反序列化为 Kotlin JS 类(类似于 JVM 中的 Jackson),但我还不能透露时间范围。

UPD:有kotlinx.serialization将 Kotlin 类与 JSON 进行映射的库。

关于javascript - Kotlin JS JSON 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44715920/

相关文章:

iphone - REST 与 SOAP 对于大量安全数据的比较

java - Kotlin - 无法解析 JSON

javascript - 在 JSFiddle 中加载 Facebook API

php - 如何正确使用 JSON.stringify 和 json_decode()

javascript - 如何使用 ReactJS 在长时间操作之前立即反馈给用户?

javascript - 使用 Node.js 发送 Json 时为 "Maximum call stack size exceeded"

javascript - 从 Google+ 相册中获取 JSON 格式的照片

javascript - 使用jquery将json导入到html输入字段

android - 给定的 Artifact 包含一个字符串文字,其包引用为 'android.support.v4',无法安全地重写

macos - 在 Mac 上将 Kotlin 与 vscode 结合使用 --code 可以工作,但 intelisense 显示 [kotlin] 未解析的引用