Saltar al contenido

JSON con Swift 3

14/11/2016
json-con-swift-3

En esta entrada voy a mostrarte como parsear un JSON con Swift 3.

Si hay algo que se ha estandarizado en los últimos años son los archivos JSON.

El motivo es que debido a la gran cantidad de datos que demandan las aplicaciones hoy en día, se hace imprescindible tratar estos datos de una forma ligera y manejable, y para este cometido tenemos a nuestro amigo JSON.

¿Que es un JSON?

Un JSON es un archivo de texto, se usa para el intercambio de datos entre una App y un servidor.

JSON es el acrónimo de JavaScript Object Notation.

Durante un tiempo JSON convivio con XML, otro tipo de archivo de intercambio de texto. Sin embargo al ser JSON más ligero y más fácil de parsear que un XML, ha convertido a JSON en el archivo de referencia para intercambiar información en aplicaciones cliente-servidor.

json-con-swift-3-1
Imagen: www.json.org

Pero me dejo de rollos y vamos a ver como cogemos un “chorizo” y hacemos sobrasada, o lo que es lo mismo, vamos a ver como parsear un JSON con Swift 3.

El archivo

Texto, Arrays, Diccionarios, todo esto es lo que va a almacenar un JSON.

Imagina que tenemos uno con el siguiente contenido:

{
  "equipos" : [
    {
      "nombre" : "Real Madrid",
      "anioFundacion" : "1902"
    },
    {
      "nombre" : "Juventus de Turin",
      "anioFundacion" : "1897"
    },
    {
      "nombre" : "Manchester United",
      "anioFundacion" : "1878"
    }
  ]
}

Accediendo al archivo

Lo primero de todo es acceder a los datos, lo normal es recibir este archivo como respuesta de algún servicio Web.

En este ejemplo práctico vamos a imaginar que tenemos una URL de acceso que nos devuelve el JSON, entonces debemos llamar a esa URL, la llamada y descarga del archivo lo haremos mediante la clase de Apple URLSession, esto nos permite trabajar de forma nativa, y no depender de un Framework de terceros como Alamofire u otros similares.

En el método viewDidLoad() creamos la siguiente implementación:

 override func viewDidLoad() {
        super.viewDidLoad()

        let requestURL: NSURL = NSURL(string: "LA URL QUE SEA QUE NOS DEVUELVA EL JSON")!
        let urlRequest: NSMutableURLRequest = NSMutableURLRequest(url: requestURL as URL)
        let session = URLSession.shared

        let task = session.dataTask(with: urlRequest as URLRequest) {
            (data, response, error) -> Void in
            
            let httpResponse = response as! HTTPURLResponse
            let statusCode = httpResponse.statusCode
            
            if (statusCode == 200) {

                print("Everyone is fine, file downloaded successfully.")

            }
        }
        
        task.resume()
    }

Observa como en las 3 primeras líneas orquestamos el mecanismo para crear la URL, a continuación usamos la función dataTask para gestionar la llamada a la URL.

Es interesante que veas como creamos dos constantes para ver que respuesta nos devuelve la llamada al servidor, hacemos uso de la clase HTTPURLResponse. Si el código devuelto es 200 significa que el servidor ha respondido de forma satisfactoria, y es aquí dónde deberíamos gestionar la respuesta que no es otra cosa que el archivo JSON.

Parsear el JSON con Swift 3

Si hemos recibido de forma correcta el archivo, tenemos que gestionar lo datos que contiene.

Esto puede ser algo sencillo o bien convertirse en tu peor pesadilla, pero de verdad ¡eh!

He conocido el infierno intentando parsear un JSON.

Lo que si deberías hacer es utilizar el mecanismo do – try – catch, al menos es lo que yo hago.

do{

let parseoDatos = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String:Any]

let contenido = parseoDatos["equipos"] as! [String:Any]

let nombreEquipo = contenido["nombre"] as! String

print("El Json contiene: \(contenido)")

print("El nombre del equipo es: \(nombreEquipo)")

}catch {

print("El Json tiene un error: \(error)")

}

Resumiendo

Fíjate como usamos la clase JSONSerialization para parsear el JSON, poco que explicar del resto, pues doy por hecho que si estás leyendo esta entrada tienes conocimientos suficientes para entender el resto de código.

Este es un ejemplo muy sencillo, pues el JSON era muy simple, pero no menosprecies la potencia de este tipo de archivos, no en vano es usado a diario por empresas como Facebook, Google, Twitter, etc.

La complejidad vendrá de como estén estructurados los datos del JSON y como accedemos a ellos, sin embargo colecciones, condiciones y bucles son nuestras aliados para conseguir parsear el JSON con Swift 3.