Kotlin JS JSON反序列化

use*_*629 7 javascript json kotlin

我在javascript平台上使用kotlin.此代码在第六行失败,但"Uncaught TypeError:aciterator不是函数"除外.

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)
}
Run Code Online (Sandbox Code Playgroud)

在javascript debuger中我可以看到,对象"a"被反序列化.但我想,它不是A类型的有效kotlin对象.无论如何,如何从对象"a"或原始json字符串创建类型A的有效kotlin对象实例?

Ale*_*eev 7

你不应该使用JSON.parse常规的Kotlin课程.与外部接口一起使用,即:

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)
}
Run Code Online (Sandbox Code Playgroud)

对不起,这种限制无法通过Kotlin类型系统表达.

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

UPD:有kotlinx.serialization库,它将Kotlin类映射到JSON和从JSON映射.