Generador de structs Codable de Swift desde JSON

Pega una respuesta de API en JSON y obtén structs de Swift que la decodifican con JSONDecoder. Las claves pasan a propiedades en camelCase, y un struct cuyas claves no coinciden recibe un enum CodingKeys con los nombres exactos del JSON. Los valores que pueden ser null o faltar pasan a opcionales.

Propiedades

Funciona en tu navegador: nada de lo que escribes se envía a ningún sitio.

Cómo se usa

  1. Pega un ejemplo de JSON con datos realistas; varios elementos por array ayudan a encontrar claves opcionales.
  2. Elige propiedades let (inmutables) o var.
  3. Copia el código a un archivo .swift y decodifica con try JSONDecoder().decode(Root.self, from: data).

Cómo funciona

El ejemplo se convierte en una «forma»: cada clave con todos los tipos que aparecen en ella. Todos los objetos de un array forman un struct, así que una clave que solo está en algunos pasa a ser opcional. Codable decodifica una clave opcional ausente como nil.

  • Las propiedades van en camelCase: order_id → orderId; una palabra reservada de Swift, como default, se escribe entre comillas invertidas.
  • Los nombres de struct salen de las claves: items contiene [Item], customer pasa a Customer.
  • Un array de nivel superior da un typealias, por ejemplo typealias Root = [RootItem].

Ejemplo

{"line_items":[{"sku":"A","note":null,"qty":1},{"sku":"B","note":"x"}]} con var da:

import Foundation

struct Root: Codable {
    var lineItems: [LineItem]

    enum CodingKeys: String, CodingKey {
        case lineItems = "line_items"
    }
}

struct LineItem: Codable {
    var sku: String
    var note: String?
    var qty: Int?
}

Consejos

  • Las fechas llegan como cadenas: cambia el tipo a Date y configura decoder.dateDecodingStrategy (por ejemplo .iso8601) si quieres interpretarlas.
  • Añade tú la conformidad con Identifiable o Hashable donde SwiftUI la necesite.
  • Para modelos Kotlin o TypeScript del mismo JSON, usa los generadores vecinos.

Preguntas frecuentes

¿Cómo se traducen los tipos de JSON a Swift?

Las cadenas pasan a String, true y false a Bool, los enteros a Int y los demás números a Double (una mezcla da Double). Los arrays pasan a [T], los objetos a structs Codable propios, y null o una clave que falta en algunos objetos hacen la propiedad opcional (T?).

¿Cuándo se añade el enum CodingKeys?

Cuando al menos un nombre de propiedad difiere de su clave JSON, por ejemplo orderId para order_id. Entonces Swift necesita un case por cada propiedad, así que el enum las lista todas, con el nombre del JSON solo donde cambia.

¿Qué es JSONValue?

Codable no tiene un tipo integrado para «cualquier JSON». Cuando en un lugar hay valores de distinto tipo, el generador usa un pequeño enum JSONValue (string, number, bool, object, array, null) y añade su código al final.

¿Puedo usar convertFromSnakeCase?

Sí: con decoder.keyDecodingStrategy = .convertFromSnakeCase puedes borrar los enum CodingKeys de claves en snake_case. Mantenlos si hay claves con otros estilos, como first-name, que esa estrategia no convierte.

Más en Desarrollo

Todas las herramientas de la categoría: Desarrollo ·Actualizado el 4 de noviembre de 2026

Opciones de privacidad

Google Analytics nos muestra qué herramientas se usan y si funcionan. Puede usar cookies. Tu elección se guarda en este navegador.