es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo serializar / deserializar JSON con campos anidados en Kotlin?

Estoy usando Json.decodeFromString(“string de json”) (https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/serializers.md)

El modelo es como sigue:

data class User(val id: String, val name: String, val assets: List)
data class Asset(val id: String, val sku: String, val name: String)

pero el json de entrada es como sigue:

{
“data”: {
“id”: “userId”,
“name”: “userName”,
“body”: {
“assets”: [
{
“data”: {
“id”: “assetId”,
“sku”: “assetSku”,
“name”: “assetName”
}
}
]
}
}
}

¿Cómo puedo analizar el json con un serializador? Parece que no es fácil analizarlo con serializadores delegados o de sustitución.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Puedes utilizar la funcionalidad Polimórfica de Kotlinx Serialization para analizar el JSON.

    En primer lugar, es necesario definir una clase @Serializable para el objeto data en el JSON:

    @Serializable
    data class DataObject(
        val id: String,
        val name: String,
        val body: Body
    )
    
    @Serializable
    data class Body(
        val assets: List<asset>
    )
    
    @Serializable
    data class Asset(
        val data: AssetData
    )
    
    @Serializable
    data class AssetData(
        val id: String,
        val sku: String,
        val name: String
    )
    

    Luego, puedes utilizar la anotación @Polymorphic para definir la clase User:

    @Serializable
    @Polymorphic
    data class User(
        @Polymorphic val data: DataObject
    )
    

    Por último, puedes utilizar la función Json.decodeFromString para analizar el JSON:

    kotlin
    val user = Json.decodeFromString<user>("cadena JSON")

Comments are closed.