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 analizar una respuesta json con valores de múltiples tipos para el mismo campo?

¿Cómo analizar la clave de answerData de la respuesta JSON en Kotlin, ya que su tipo cambia en cada bloque? Intenté mantenerlo como Any, pero no pude realizar la conversión de tipos. ¿Cómo analizar answerData?

{
“status”: “OK”,
“data”: [
{
“id”: 10,
“answerData”: null
},
{
“id”: 21,
“answerData”: {
“selectionOptionId”: 0,
“selectionOptionText”: null
}
},
{
“id”: 45,
“answerData”: {
“IsAffiliatedWithSeller”: false,
“AffiliationDescription”: null
}
},
{
“id”: 131,
“answerData”: [
{
“2”: “Chapter 11”
},
{
“3”: “Chapter 12”
},
{
“1”: “Chapter 7”
}
]
},
{
“id”: 140,
“answerData”: [
{
“liabilityTypeId”: 2,
“monthlyPayment”: 200,
“remainingMonth”: 2,
“liabilityName”: “Separate Maintenance”,
“name”: “Two”
},
{
“liabilityTypeId”: 1,
“monthlyPayment”: 300,
“remainingMonth”: 1,
“liabilityName”: “Child Support”,
“name”: “Three”
}
]
}
]
}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para analizar la clave answerData de la respuesta JSON en Kotlin, necesitamos crear una clase de datos que pueda manejar todos los diferentes tipos de valores answerData que están presentes en JSON. Luego, podemos usar la biblioteca Gson para deserializar la respuesta JSON en nuestra clase de datos.

    Aquí hay un ejemplo de una clase de datos que puede manejar todos los diferentes tipos de valores answerData:

    data class AnswerData(
        val selectionOptionId: Int?,
        val selectionOptionText: String?,
        val IsAffiliatedWithSeller: Boolean?,
        val AffiliationDescription: String?,
        val chapters: List<><string, string="">>?,
        val liabilities: List<><string, any="">>?
    )
    

    Luego podemos deserializar la respuesta JSON usando Gson de la siguiente manera:

    val gson = Gson()
    val response = gson.fromJson(jsonString, Response::class.java)
    
    // Response es una clase de datos que representa toda la respuesta JSON
    data class Response(
        val status: String,
        val data: List<data>
    )
    
    // Data es una clase de datos que representa cada bloque de datos en la respuesta JSON
    data class Data(
        val id: Int,
        val answerData: AnswerData
    )
    

    Ahora podemos acceder a los valores answerData en cada objeto Data en la lista data de la siguiente manera:

    for (d in response.data) {
        val answerData = d.answerData
    
        // Dependiendo del tipo de answerData, diferentes propiedades serán no nulas
        when {
            answerData.selectionOptionId != null -> {
                // Manejar el caso de selectionOptionId
            }
            answerData.IsAffiliatedWithSeller != null -> {
                // Manejar el caso de IsAffiliatedWithSeller
            }
            answerData.chapters != null -> {
                // Manejar el caso de chapters
            }
            answerData.liabilities != null -> {
                // Manejar el caso de liabilities
            }
            else -> {
                // Manejar el caso nulo
            }
        }
    }
    

    Tenga en cuenta que en este ejemplo, estamos asumiendo que la variable jsonString contiene la respuesta JSON como una cadena. Además, la declaración when puede ser reemplazada con una declaración if u otra lógica de ramificación dependiendo de su caso de uso.</string,></string,>

Comments are closed.