Codificación con JSONEncoder
Genere datos JSON a partir de valores de Swift.
Codificación con JSONEncoder es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 2 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 JSONEncoder
JSONEncoder es la herramienta principal que convierte cualquier valor Encodable en Data JSON. Cree uno y, después, llame a encode(_:) sobre su valor.
import Foundation
struct Movie: Codable {
var title: String
var year: Int
}
let encoder = JSONEncoder()
let data = try encoder.encode(Movie(title: "Up", year: 2009))
print(data.count, "bytes")De Data a un String legible
encode(_:) devuelve Data binarios. Para leerlos, decodifique los bytes como UTF-8 con String(data:encoding:).
import Foundation
struct Movie: Codable {
var title: String
var year: Int
}
let data = try JSONEncoder().encode(Movie(title: "Up", year: 2009))
let text = String(data: data, encoding: .utf8)!
print(text)Salida con formato legible
De forma predeterminada, JSON es compacto. Establezca outputFormatting = .prettyPrinted para añadir sangría y saltos de línea, de modo que el resultado sea fácil de leer para las personas.
import Foundation
struct Movie: Codable {
var title: String
var year: Int
}
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let data = try encoder.encode(Movie(title: "Up", year: 2009))
print(String(data: data, encoding: .utf8)!)Claves ordenadas para una salida estable
Combine las opciones en un array. Añadir .sortedKeys ordena las claves alfabéticamente, lo que hace que la salida sea determinista y resulta ideal para pruebas y snapshots.
import Foundation
struct Movie: Codable {
var title: String
var year: Int
var rating: Double
}
let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(Movie(title: "Up", year: 2009, rating: 4.8))
print(String(data: data, encoding: .utf8)!)Codificación de arrays
Puede codificar colecciones directamente. Un array de valores Encodable se convierte en un array JSON.
import Foundation
struct Movie: Codable {
var title: String
var year: Int
}
let list = [Movie(title: "Up", year: 2009),
Movie(title: "Coco", year: 2017)]
let data = try JSONEncoder().encode(list)
print(String(data: data, encoding: .utf8)!)Codificación de diccionarios
Un diccionario [String: Encodable-element] se codifica como un objeto JSON. Tenga en cuenta que el orden de las claves no está garantizado a menos que añada .sortedKeys.
import Foundation
let scores: [String: Int] = ["alice": 90, "bob": 75]
let encoder = JSONEncoder()
encoder.outputFormatting = .sortedKeys
let data = try encoder.encode(scores)
print(String(data: data, encoding: .utf8)!)Codificación de estructuras anidadas
Los tipos Codable anidados se codifican de forma recursiva, lo que produce automáticamente objetos JSON anidados.
import Foundation
struct Author: Codable { var name: String }
struct Post: Codable {
var title: String
var author: Author
}
let p = Post(title: "Hello", author: Author(name: "Mae"))
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
print(String(data: try encoder.encode(p), encoding: .utf8)!)Reutilización de un encoder
Puede reutilizar un JSONEncoder configurado para muchos valores. Configúrelo una vez y siga aplicando el mismo formato en todo el código.
import Foundation
struct Tag: Codable { var name: String }
let encoder = JSONEncoder()
encoder.outputFormatting = .sortedKeys
for t in [Tag(name: "swift"), Tag(name: "json")] {
let data = try encoder.encode(t)
print(String(data: data, encoding: .utf8)!)
}Codificación de números y booleanos
Las propiedades numéricas y booleanas se codifican como literales JSON, sin comillas. Los strings llevan comillas; Int, Double y Bool no.
import Foundation
struct Stats: Codable {
var count: Int
var ratio: Double
var enabled: Bool
}
let data = try JSONEncoder().encode(Stats(count: 3, ratio: 0.75, enabled: true))
print(String(data: data, encoding: .utf8)!)Codificación de optionals
De forma predeterminada, un optional nil se omite por completo del JSON. Un optional que no es nil se codifica como el valor que contiene.
import Foundation
struct Item: Codable {
var name: String
var note: String?
}
let data = try JSONEncoder().encode(Item(name: "Pen", note: nil))
print(String(data: data, encoding: .utf8)!)Unificación del proceso
Un flujo de codificación habitual consiste en crear el valor, configurar el encoder, llamar a encode y convertir después los Data en un String para registrarlos o transportarlos.
import Foundation
struct Order: Codable {
var id: Int
var items: [String]
}
let order = Order(id: 42, items: ["a", "b"])
let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(order)
print(String(data: data, encoding: .utf8)!)Comprobación rápida: JSONEncoder
Compruebe sus conocimientos sobre codificación.
Resumen: codificación con JSONEncoder
Ha aprendido a convertir valores de Swift en JSON:
encode(_:)devuelveData; conviértalos conString(data:encoding:).outputFormatting, junto con.prettyPrintedy.sortedKeys, controla el formato.- Los arrays, diccionarios, tipos anidados, números, booleanos y optionals se codifican de forma adecuada.
- Puede reutilizar un encoder configurado con muchos valores.
Preguntas frecuentes
¿La lección «Codificación con JSONEncoder» es gratis?
Sí — el texto completo de «Codificación con JSONEncoder» 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 «Codificación con JSONEncoder»?
Genere datos JSON a partir de valores 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 2 de 4.
¿Cuánto tiempo toma la lección «Codificación con JSONEncoder»?
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
- Conformidad con Codable
- Codificación con JSONEncoder
- Decodificación con JSONDecoder
- Gestión de tipos opcionales y anidados