Deserialization de KS JS JSON

Yo uso kotlin en la plataforma javascript. Este código falla en la sexta línea con la exception "UnEdge TypeError: aciterator no es una 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(ab) for (c in ac) println(c) } 

En javascript debuger puedo ver que ese object "a" está deserializado. Pero creo que no es un object kotlin válido de tipo A. De alguna forma, ¿cómo crear una instancia de object kotlin válida de tipo A a partir del object "a" o de una cadena json original?

No debe usar JSON.parse con las classs regulares de Kotlin. Úselo con interfaces externas en su lugar, es decir:

 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(ab) for (c in ac) println(c) } 

Lo sentimos, dicha restricción no se puede express a través del sistema de tipo Kotlin.

Y sí, como mencionó @marstran, no debería usar List<T> y otras collections de Kotlin en este caso. Estamos trabajando en una biblioteca para deserializar las classs de JSON a Kotlin JS (similar a Jackson en JVM), pero aún no puedo decir nada sobre el cronogtwig.

La function JSON.parse asigna a la function Javascript nativa JSON.parse . Esta function no conoce la interfaz de la List de Kotlin, por lo que no tendrá un método iterator . La list solo se analiza como una matriz JavaScript estándar.

Podrías hacerlo funcionar escribiendo esto:

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

Ahora para este caso (map JSON a la class Kotlin) puede usar la vista previa de kotlinx.serialization

  • ¿Lees múltiples inputs de la misma línea en Kotlin?
  • ¿Por qué el código de byte de Kotlin hace reference a java.util.function.BiConsumer?
  • Genéricos y class abstracta en Kotlin
  • Generar SerialVersionUID para las classs de Kotlin en IntelliJ
  • NoClassDefFoundError en time de ejecución
  • ¿Cómo hacer una actividad de "información de deslizamiento"?
  • ¿Cómo acceder al argumento constructor que no es variable miembro en la function init?
  • Nuevo para Kotlin ... tener problemas con Opcionales y Casting
  • La interfaz de Java SAM creada a partir de Kotlin da ClassCastException
  • que hace (x..x) .map hacer en kotlin android
  • Nombrar una condición if-value para usar en if block