Introducción al trabajo con JSON en Swift
JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos ampliamente utilizado en el desarrollo móvil y web. Para los desarrolladores principiantes en Swift (iOS/macOS), saber trabajar con JSON es una habilidad obligatoria. En este artículo analizaremos dos enfoques principales: el clásico JSONSerialization y el protocolo moderno Codable. Aprenderá cómo obtener datos de la red, analizarlos y convertirlos nuevamente a JSON para enviarlos al servidor.
Independientemente de si está creando una aplicación para el clima, una lista de tareas o una red social, JSON será su fiel compañero. Comencemos con un ejemplo simple y pasemos gradualmente a escenarios más complejos.
Fundamentos de JSON en Swift: estructura y tipos de datos
Antes de escribir código, es importante entender cómo se ve JSON. En Swift, JSON se representa como diccionarios ([String: Any]) y arreglos ([Any]). Los tipos de datos principales en JSON son:
- Cadenas — encerradas entre comillas dobles (
"Hola") - Números — enteros y de punto flotante (
42,3.14) - Valores booleanos —
trueofalse - Arreglos — listas ordenadas de valores (
[1, 2, 3]) - Objetos — colecciones no ordenadas de pares "clave-valor" (
{"clave": "valor"}) - null — valor vacío
En Swift, para representar JSON es conveniente usar las estructuras de datos integradas. Veamos un ejemplo de un objeto JSON simple:
{ "name": "Iván", "age": 25, "isStudent": false, "hobbies": ["lectura", "programación"]}Ahora veamos cómo trabajar con este formato en código Swift.
Análisis de JSON con JSONSerialization (método clásico)
Antes de la aparición del protocolo Codable, los desarrolladores usaban la clase JSONSerialization. Este método sigue siendo relevante hoy en día, especialmente cuando la estructura del JSON es desconocida de antemano o es muy dinámica.
Ejemplo básico de análisis
Supongamos que tenemos una cadena JSON que debe convertirse en objetos Swift:
let jsonString = """{ "name": "María", "age": 30, "isEmployed": true}"""
if let jsonData = jsonString.data(using: .utf8) { do { if let dictionary = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any] { let name = dictionary["name"] as? String ?? "Desconocido" let age = dictionary["age"] as? Int ?? 0 let isEmployed = dictionary["isEmployed"] as? Bool ?? false print("Nombre: \\(name), Edad: \\(age), Trabaja: \\(isEmployed)") } } catch { print("Error al analizar JSON: \\(error.localizedDescription)") }}Tenga en cuenta: después de obtener el diccionario, convertimos explícitamente cada elemento al tipo deseado. Esto puede ser incómodo cuando hay muchos campos.
Trabajo con arreglos en JSON
A menudo, JSON contiene arreglos de objetos. Analicemos un ejemplo con un arreglo de usuarios:
let jsonArrayString = """[ {"name": "Ana", "age": 22}, {"name": "Pedro", "age": 28}]"""
if let data = jsonArrayString.data(using: .utf8) { do { if let users = try JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]] { for user in users { let name = user["name"] as? String ?? "" let age = user["age"] as? Int ?? 0 print("\\(name): \\(age) años") } } } catch { print("Error: \\(error)") }}El método JSONSerialization es simple, pero requiere mucha conversión manual de tipos. Para proyectos modernos, Apple recomienda usar Codable.