← Todas las herramientas Code Gen

Generador de Structs Swift desde JSON

Pega JSON y obtén al instante structs Swift Codable listas para iOS, macOS y SwiftUI.

Swift Codable y el patrón CodingKeys

El protocolo Codable de Swift (alias de tipo para Encodable & Decodable) es la forma estándar de parsear JSON. El generador produce tipos struct o class conformes a Codable con un enum CodingKeys cuando los nombres de propiedades difieren de las claves JSON. La convención de nomenclatura Swift usa lowerCamelCase para propiedades, por lo que "first_name" en JSON se mapea a firstName en Swift, con un case CodingKeys enlazando ambos.

El mapeo de tipos sigue las convenciones de Swift: las cadenas JSON se convierten en String, los enteros en Int, los decimales en Double, los booleanos en Bool y los arrays en [T]. Los objetos anidados generan sus propios tipos struct con nombre. JSON null y los campos ausentes se mapean a Optional (T?) con un valor por defecto nil en el inicializador.

El generador puede producir declaraciones struct (tipo valor, por defecto) o class (tipo referencia). Las structs son preferidas en Swift para modelos de datos porque tienen semántica de valor, son automáticamente thread-safe y evitan ciclos de retención.

CodingKeys, decodificadores personalizados y manejo de fechas

Cuando cualquier nombre de propiedad en una struct Swift difiere de su clave JSON, se genera un enum CodingKeys que lista el mapeo para cada propiedad. Este es el enfoque estándar de Swift compatible con JSONDecoder.

Una alternativa es establecer keyDecodingStrategy en JSONDecoder a .convertFromSnakeCase, lo que elimina la necesidad de CodingKeys cuando las únicas diferencias son snake_case vs camelCase. El generador puede emitir un comentario indicando esta opción cuando aplica.

Las cadenas de fecha JSON son un desafío común. El generador tipa los campos de fecha como String por defecto, pero un toggle los cambia a Date y emite una nota para establecer dateDecodingStrategy en JSONDecoder.

Flujos de trabajo de desarrollo iOS y SwiftUI

Los desarrolladores iOS que usan URLSession o Alamofire parsean respuestas de API con JSONDecoder().decode(MyModel.self, from: data). El generador produce el tipo MyModel que necesitas, con todos los tipos anidados definidos en el mismo archivo.

SwiftUI usa propiedades @Published y clases ObservableObject para dirigir la UI desde modelos de datos. El generador puede opcionalmente envolver la struct raíz en una clase ObservableObject con propiedades @Published.

El código de red con Combine y async/await en aplicaciones iOS modernas depende de objetos modelo bien tipados. La conformidad Codable generada aquí se integra directamente con URLSession.shared.data(from:) y JSONDecoder.

FAQ

¿Se envían mis datos a un servidor?

No. Todo el procesamiento se ejecuta completamente en tu navegador. Tu JSON nunca sale de tu dispositivo.

¿Debo usar struct o class en la salida?

Usa struct (por defecto) para modelos de datos puros — es el Swift idiomático. Usa class cuando necesites herencia, interop @objc o semántica de referencia.

¿Cómo se manejan las palabras reservadas de Swift como nombres de propiedad?

Las palabras reservadas de Swift como "class", "struct", "enum", "func" y "let" se escapan con comillas inversas (ej. `class`) como nombres de propiedad, y una entrada CodingKeys las mapea a la clave JSON original.

¿Se admiten estructuras profundamente anidadas?

Sí. Cada objeto JSON anidado se convierte en su propio tipo Swift con nombre. Todos los tipos se emiten en un único archivo en orden de dependencia.

¿Puedo generar modelos compatibles con SwiftyJSON?

El generador apunta a la salida Codable nativa de Swift, que es el estándar moderno. SwiftyJSON es un enfoque legacy; las structs Codable son más eficientes, type-safe y no requieren la dependencia SwiftyJSON.

Herramientas relacionadas