En nuestra jornada en busca de verdaderamente hacer el cambio a Swift, vamos a usar como ejemplo algo muy común pero que conlleva una serie de sorprendentes dificultades. Por eso mismo es un excelente ejemplo.
Vamos a descargar un cutre json y lo vamos a transformar (siempre y cuando sea posible) en una serie de objetos de Swift.
Si no tenemos control sobre el json que nos llega, solo nos queda aplicar el principio de máxima desconfianza y validar todos los datos que nos llegan de fuera.
El JSON de Satanás
El json que vamos a usar es una versión de uno que se utiliza en el Startup Engineering Bootcamp de Keepcoding (en el track mobile) para crear un lector de libros en PDF. Aquí tenéis a esta joya: jsonFromHell. Como podéis ver, se trata de un array de diccionarios json que representan a un libro. Aquí podéis ver un ejemplo:{ "authors" : "Jeff Heard, Anand Rajaraman, Stefane Laborde", "image_url" : "http://hackershelf.com/media/cache/06/df/06df282659657e529d8111e08aa79274.jpg", "pdf_url" : "http://infolab.stanford.edu/~ullman/mmds/book.pdf", "tags" : "data mining, text processing", "title" : "Mining of Massive Datasets" }Lo primero que vemos es la estructura del libro. Todo libro tendrá los siguientes componentes (que tendremos que replicar en nuestra clase Swift):
- autores
- url de la imagen
- url del pdf en sí
- tags o etiquetas
- título
Para que un libro sea correcto, ha de tener estos 5 elementos y todos ellos han de ser correctos a su vez.
¿Qué tiene de malo este JSON?
Muchas cosas. Empecemos por lo evidente y que tendría que haber sido resuelto por quien haya perpetrado el API que nos devuelve ese boñigo:- ? namber guán: authors debería de ser un array de cadenas. En vez de eso, van y nos dan una cadenas separada por comas. Gracias, chato.
- ? namber chú: a tags le pasa más de lo mismo. ¿Por qué porras no es un array?
Lo que no tiene arreglo
El primer problema con que nos vamos a encontrar es que JSON no tiene una estructura fija frente a la cual se pueda validar. No hay nada que defina un «libro correcto», y nos podría llegar cualquier cosa. Por ejemplo,- nada impide que nos llegue un libro faltándole alguna propiedad
- podría llegarnos un libro con alguna de las propiedades vacías
- las urls podrán no serlo o ser incorrectas
- Podría llegarnos un diccionario vacío.
Piensa mal y te quedarás corto — Antiguo proverbio gallegoEs decir, antes de que llegue a Swift, tendremos que validar las chapuzas de json, para que a Swift no le dé un síncope. También es cierto que podríamos haber usado otra cosa en vez de JSON, como puede ser Captain Proto, pero eso lo dejamos para otro artículo.