0Pricing
Swift Academy · Lección

Decodificación con JSONDecoder

Analice datos JSON y conviértalos en valores tipados de Swift.

Decodificación con JSONDecoder es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.

Creación de un JSONDecoder

JSONDecoder reconstruye un valor de Swift a partir de Data JSON. Debe indicarle el tipo que quiere producir y proporcionarle los bytes.

import Foundation

struct City: Codable {
    var name: String
    var population: Int
}

let json = "{\"name\":\"Oslo\",\"population\":700000}"
let data = json.data(using: .utf8)!
let city = try JSONDecoder().decode(City.self, from: data)
print(city.name, city.population)

Pasar el tipo con .self

El primer argumento es el metatipo, escrito como MyType.self. Esto indica al decoder qué estructura debe construir a partir de los datos.

import Foundation

struct Flag: Codable { var ok: Bool }

let data = "{\"ok\":true}".data(using: .utf8)!
let result = try JSONDecoder().decode(Flag.self, from: data)
print(result.ok)

Decodificación de arrays

Para decodificar un array JSON, solicite un tipo de array como [Int].self o [MyStruct].self.

import Foundation

let json = "[10, 20, 30]"
let data = json.data(using: .utf8)!
let numbers = try JSONDecoder().decode([Int].self, from: data)
print(numbers.reduce(0, +))

Decodificación de objetos anidados

Los objetos JSON anidados se corresponden con structs Codable anidados. El decoder recorre el árbol y rellena cada nivel por usted.

import Foundation

struct Coord: Codable { var lat: Double; var lon: Double }
struct Place: Codable { var name: String; var coord: Coord }

let json = "{\"name\":\"X\",\"coord\":{\"lat\":1.0,\"lon\":2.0}}"
let p = try JSONDecoder().decode(Place.self, from: json.data(using: .utf8)!)
print(p.coord.lat, p.coord.lon)

Captura de errores de decodificación

decode lanza un error cuando los datos no coinciden con el tipo. Envuélvalo en do/catch para gestionar las entradas con formato incorrecto de manera adecuada.

import Foundation

struct User: Codable { var name: String }

let bad = "{\"wrong\":1}".data(using: .utf8)!
do {
    let u = try JSONDecoder().decode(User.self, from: bad)
    print(u.name)
} catch {
    print("Failed:", error)
}

Errores keyNotFound

Un error frecuente es DecodingError.keyNotFound, que se lanza cuando falta una clave obligatoria. Analice el error mediante pattern matching para informar exactamente de lo que ha fallado.

import Foundation

struct User: Codable { var name: String }

let bad = "{}".data(using: .utf8)!
do {
    _ = try JSONDecoder().decode(User.self, from: bad)
} catch let DecodingError.keyNotFound(key, _) {
    print("Missing key:", key.stringValue)
} catch {
    print("Other error:", error)
}

Errores typeMismatch

Si un valor tiene un tipo JSON incorrecto, por ejemplo, un string donde se espera un Int, el decoder lanza DecodingError.typeMismatch.

import Foundation

struct Count: Codable { var n: Int }

let bad = "{\"n\":\"oops\"}".data(using: .utf8)!
do {
    _ = try JSONDecoder().decode(Count.self, from: bad)
} catch let DecodingError.typeMismatch(type, _) {
    print("Type mismatch, expected:", type)
} catch {
    print("Other:", error)
}

Errores dataCorrupted

Una sintaxis JSON no válida genera DecodingError.dataCorrupted. Esto normalmente significa que los bytes no contienen JSON válido.

import Foundation

struct User: Codable { var name: String }

let bad = "not json".data(using: .utf8)!
do {
    _ = try JSONDecoder().decode(User.self, from: bad)
} catch is DecodingError {
    print("Decoding failed: data corrupted")
} catch {
    print("Other:", error)
}

Decodificación en optionals

Si una propiedad es optional, una clave ausente se decodifica como nil sin lanzar un error. Esto hace que los campos opcionales toleren la ausencia de datos.

import Foundation

struct Profile: Codable {
    var name: String
    var bio: String?
}

let json = "{\"name\":\"Kai\"}"
let p = try JSONDecoder().decode(Profile.self, from: json.data(using: .utf8)!)
print(p.name, p.bio ?? "no bio")

Reutilización de un decoder

Al igual que el encoder, puede reutilizar un JSONDecoder configurado para muchas cargas útiles. Mantenga una instancia y decodifique con ella distintas entradas.

import Foundation

struct Word: Codable { var text: String }

let decoder = JSONDecoder()
let inputs = ["{\"text\":\"hi\"}", "{\"text\":\"bye\"}"]
for s in inputs {
    let w = try decoder.decode(Word.self, from: s.data(using: .utf8)!)
    print(w.text)
}

Decodificar, inspeccionar y utilizar

Un flujo completo consiste en recibir Data, decodificarlo en un valor tipado dentro de do/catch y utilizar después el resultado fuertemente tipado de forma segura.

import Foundation

struct Weather: Codable {
    var city: String
    var temp: Double
}

let json = "{\"city\":\"Rome\",\"temp\":21.5}"
do {
    let w = try JSONDecoder().decode(Weather.self, from: json.data(using: .utf8)!)
    print("\(w.city): \(w.temp)C")
} catch {
    print("Decode error:", error)
}

Comprobación rápida: JSONDecoder

Compruebe sus conocimientos sobre decodificación.

Resumen: decodificación con JSONDecoder

Ha aprendido a reconstruir valores de Swift a partir de JSON:

  • decode(MyType.self, from: data) produce un valor tipado.
  • Los arrays, objetos anidados y optionals se decodifican automáticamente.
  • decode lanza casos de DecodingError: keyNotFound, typeMismatch, dataCorrupted y valueNotFound.
  • Envuelva las llamadas en do/catch para gestionar las entradas con formato incorrecto.

Preguntas frecuentes

¿La lección «Decodificación con JSONDecoder» es gratis?

Sí — el texto completo de «Decodificación con JSONDecoder» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Decodificación con JSONDecoder»?

Analice datos JSON y conviértalos en valores tipados de Swift. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Decodificación con JSONDecoder»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Conformidad con Codable
  2. Codificación con JSONEncoder
  3. Decodificación con JSONDecoder
  4. Gestión de tipos opcionales y anidados
← Volver a Swift Academy