Procesamiento JSON en Swift: Codable, JSONSerialization, SwiftJSON

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

Procesamiento de JSON en Swift (iOS/macOS): Guía completa

JSON (JavaScript Object Notation) es el formato principal de intercambio de datos en aplicaciones modernas de iOS/macOS. Swift proporciona un potente conjunto de herramientas para trabajar con JSON, desde los protocolos integrados Codable hasta bibliotecas de terceros que simplifican el análisis y la serialización. En este artículo, analizaremos en detalle todas las formas principales de procesar JSON en Swift para las plataformas Apple.



Soporte integrado de JSON: Codable (Swift 4+)

A partir de Swift 4, Apple introdujo los protocolos Codable (que combina Encodable y Decodable), que permiten convertir automáticamente tipos de datos personalizados a JSON y viceversa sin escribir código boilerplate.



Ejemplo básico de decodificación de JSON

import Foundation

// 1. Definimos el modelo de datosstruct User: Codable { let id: Int let name: String let email: String let isActive: Bool}

// 2. Cadena JSONlet jsonString = """{ "id": 1, "name": "Iván Petrov", "email": "ivan@example.com", "isActive": true}"""

// 3. Decodificamosif let jsonData = jsonString.data(using: .utf8) { let decoder = JSONDecoder() do { let user = try decoder.decode(User.self, from: jsonData) print("Usuario: \\(user.name), email: \\(user.email)") } catch { print("Error de decodificación: \\(error.localizedDescription)") }}


Codificación de un objeto a JSON

let newUser = User(id: 2, name: "María Sidorova", email: "maria@example.com", isActive: false)

let encoder = JSONEncoder()encoder.outputFormatting = .prettyPrinted // para una salida legible

do { let jsonData = try encoder.encode(newUser) if let jsonString = String(data: jsonData, encoding: .utf8) { print(jsonString) }} catch { print("Error de codificación: \\(error)")}


Trabajo con claves en snake_case y estrategias personalizadas

A menudo, el JSON llega con claves en estilo snake_case (por ejemplo, first_name), mientras que las propiedades de Swift se escriben en camelCase (firstName). Esto se resuelve con una sola línea:

decoder.keyDecodingStrategy = .convertFromSnakeCaseencoder.keyEncodingStrategy = .convertToSnakeCase


JSONSerialization — trabajo de bajo nivel

Para casos donde la estructura del JSON se desconoce de antemano o se requiere flexibilidad, se utiliza JSONSerialization de Foundation:

if let jsonData = jsonString.data(using: .utf8) {    do {        if let jsonDict = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any] {            let name = jsonDict["name"] as? String ?? ""            let age = jsonDict["age"] as? Int ?? 0            print("Nombre: \\(name), Edad: \\(age)")        }    } catch {        print("Error: \\(error)")    }}

Este método devuelve Any, por lo que se requiere conversión de tipos. Es adecuado para datos dinámicos, pero menos seguro en cuanto a tipos.



Bibliotecas de terceros

A pesar del poder de las herramientas integradas, existen bibliotecas populares que simplifican el trabajo con JSON en Swift:



1. SwiftyJSON

Una de las bibliotecas más populares. Permite acceder a los elementos JSON mediante subíndices (subscripts) y maneja automáticamente los valores opcionales.

// Instalación a través de Swift Package Manager: https://github.com/SwiftyJSON/SwiftyJSONimport SwiftyJSON

let json = JSON(parseJSON: jsonString)let userName = json["name"].stringValuelet userEmail = json["email"].string ?? "no especificado"print("Nombre: \\(userName), Email: \\(userEmail)")

// Trabajo con objetos anidadoslet address = json["address"]["city"].stringValue


2. ObjectMapper

Biblioteca para mapear JSON a objetos y viceversa. Requiere

Recommendations