Kotlin JS JSON反序列化

我在javascript平台上使用kotlin。 此代码在第六行上失败,但“Uncaught TypeError:aciterator不是函数”exception。

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

在JavaScript的debuger我可以看到,该对象“一”是反序列化。 但我认为,它不是一个有效的typesA的kotlin对象。有什么办法,如何从对象“a”或从原始的json字符串创建typesA的有效kotlin对象实例?

您不应该使用常规Kotlin类使用JSON.parse 。 改用外部接口,即:

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

对不起,这种限制不能通过Kotlintypes系统expression。

是的,正如@marstran所提到的,在这种情况下,你不应该使用List和其他Kotlin集合。 我们正在研究一个将JSON反序列化为Kotlin JS类的库(类似于JVM中的Jackson),但是我还没有谈到这个时间框架。

JSON.parse函数映射到本地JavaScript函数JSON.parse 。 这个函数不知道Kotlin的List接口,所以它不会有一个iterator方法。 该列表只是解析为一个标准的JavaScript数组。

你可以通过编写这个工作来完成工作:

 for (c in listOf(ac)) println(c) 

现在对于这种情况(将JSON映射到Kotlin类),可以使用kotlinx.serialization的预览