Trabajo con JSON en Swift: análisis y serialización para principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con JSON en Swift: análisis y serialización para principiantes

\n\n

JSON (JavaScript Object Notation) es el formato de intercambio de datos más popular en aplicaciones móviles y web modernas. Si desarrollas para iOS o macOS en Swift, saber analizar y serializar JSON es una habilidad obligatoria. En este artículo, analizaremos todas las formas principales de trabajar con JSON: desde el clásico JSONSerialization hasta el moderno protocolo Codable. El material está orientado a desarrolladores principiantes que ya conocen los fundamentos de Swift.

\n\n

¿Qué es JSON y por qué es necesario en Swift?

\n\n

JSON es un formato de texto basado en la sintaxis de JavaScript. Representa pares "clave-valor", objetos anidados y arreglos. En el desarrollo de iOS, JSON se utiliza para:

\n\n
    \n
  • Obtener datos de servidores REST API
  • \n
  • Guardar configuraciones y ajustes de la aplicación
  • \n
  • Intercambiar datos entre módulos de la aplicación
  • \n
  • Trabajar con bases de datos (por ejemplo, Firebase o CoreData + JSON)
  • \n
\n\n

En Swift hay dos enfoques principales para trabajar con JSON: la forma antigua a través de JSONSerialization (de Foundation) y la moderna con los protocolos Codable, Encodable y Decodable. Comenzaremos con el más simple JSONSerialization para entender la mecánica, y luego pasaremos al potente Codable.

\n\n

Análisis de JSON con JSONSerialization (Foundation)

\n\n

JSONSerialization es una clase integrada en Foundation que convierte datos JSON en objetos Swift (diccionarios y arreglos). Este método existe desde las primeras versiones de Swift y todavía se usa en proyectos heredados. Veamos un ejemplo.

\n\n

Supongamos que tenemos una cadena JSON con información de un usuario:

\n\n
let jsonString = """\n{\n    "name": "Iván",\n    "age": 30,\n    "email": "ivan@example.com",\n    "isActive": true,\n    "hobbies": ["lectura", "programación", "deporte"]\n}\n"""
\n\n

Para analizar este JSON, primero convertimos la cadena en datos Data y luego usamos JSONSerialization:

\n\n
import Foundation\n\nif let jsonData = jsonString.data(using: .utf8) {\n    do {\n        if let dictionary = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any] {\n            print("Nombre: \\(dictionary["name"] ?? "Sin datos")")\n            print("Edad: \\(dictionary["age"] ?? "Sin datos")")\n            if let hobbies = dictionary["hobbies"] as? [String] {\n                print("Hobbies: \\(hobbies.joined(separator: ", "))")\n            }\n        }\n    } catch {\n        print("Error al analizar JSON: \\(error.localizedDescription)")\n    }\n}
\n\n

Puntos importantes:

\n
    \n
  • Siempre usa try-catch — el análisis puede lanzar un error.
  • \n
  • El resultado llega como Any, por lo que hay que convertirlo a un tipo específico ([String: Any] para objeto, [Any] para arreglo).
  • \n
  • Las opciones .mutableContainers y .fragmentsAllowed permiten controlar la flexibilidad del análisis.
  • \n
\n\n

Enfoque moderno: el protocolo Codable

\n\n

A partir de Swift 4, Apple presentó el protocolo Codable (combina Encodable y Decodable). Esto es una verdadera "magia": basta con declarar la estructura, y Swift sabe cómo analizar y serializar los datos. Reescribamos el ejemplo anterior usando Codable.

\n\n

1. Declaración del modelo de datos

\n\n
struct User: Codable {\n    let name: String\n    let age: Int\n    let email: String\n    let isActive: Bool\n    let hobbies: [String]\n}
\n\n

Nota: los nombres de los campos en la estructura deben coincidir con las claves del JSON (las mayúsculas/minúsculas importan). Si las claves difieren (por ejemplo, snake_case), usa CodingKeys.

\n\n

2. Análisis de J

Blogs

Book Recommendations