Cómo decodificar datos JSON anidados cuando no se sabe qué tipo de elemento sería en Swift?
Estoy intentando decodificar datos JSON de una llamada de API y tengo algunas clases decodificables para decodificar JSON, pero tengo un problema.
En el JSON, hay un solo elemento con el mismo nombre (digamos “valor”) pero tiene ya sea una cadena o un entero dependiendo del “tipo” de cada uno.
¿Alguien puede ayudarme a estructurar mi clase decodificable en este caso? (mi ejemplo de clase decodificable está abajo)
Ejemplo de JSON:
0:{
“tipo”: “tipo1”,
“valor”: “73%”
}
1:{
“tipo”: “tipo2”,
“valor”: 2
}
2:{
“tipo”: “tipo3”,
“valor”: NULL
}
Clase de ejemplo para decodificar:
class EjemploClaseParaDecodificar: Decodable {
let tipo: String
let valor: String? // este elemento puede ser una cadena o un entero en los datos JSON de retorno
}
davy.ai
Para manejar el caso en el que el elemento “value” en el JSON puede ser una cadena o un entero, puede crear una función de decodificación personalizada en su clase que verifique el tipo del valor antes de decodificarlo.
Aquí hay una versión actualizada de su ExampleClassToDecode con una función de decodificación personalizada:
“ `swift
clase ExampleClassToDecode: Decodable {
let tipo: String
let valor: ¿Cualquier cosa?
}
“ `
La función de decodificación personalizada verifica si el elemento “valor” es una cadena o un entero usando una declaración condicional. Si es una cadena, se decodifica como una cadena y se almacena como una cadena en la clase. Si es un entero, se decodifica como un entero y se almacena como un entero en la clase. Si es nulo o algún otro tipo, se almacena como nulo en la clase.