Codifica con JSONEncoder
Produci dati JSON dai valori Swift.
Codifica con JSONEncoder è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.
Creazione di un JSONEncoder
JSONEncoder è lo strumento principale che trasforma qualsiasi valore Encodable in Data JSON. Ne crei uno, quindi chiami encode(_:) sul valore.
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")Da Data a una stringa leggibile
encode(_:) restituisce Data binari. Per leggerli, decodifichi i byte come 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)Output formattato
Per impostazione predefinita, il JSON è compatto. Imposti outputFormatting = .prettyPrinted per aggiungere rientri e nuove righe, così il risultato sarà facile da leggere per le persone.
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)!)Chiavi ordinate per un output stabile
Combini le opzioni in un array. L'aggiunta di .sortedKeys ordina le chiavi alfabeticamente, rendendo l'output deterministico: è ideale per i test e gli snapshot.
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)!)Codifica degli array
È possibile codificare direttamente le raccolte. Un array di valori Encodable diventa 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)!)Codifica dei dizionari
Un dizionario [String: Encodable-element] viene codificato come un oggetto JSON. Si noti che l'ordine delle chiavi non è garantito, a meno di aggiungere .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)!)Codifica delle strutture annidate
I tipi Codable annidati vengono codificati ricorsivamente, producendo automaticamente oggetti JSON annidati.
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)!)Riutilizzo di un encoder
Un JSONEncoder configurato può essere riutilizzato per molti valori. Lo configuri una volta e applichi la stessa formattazione in tutto il codice.
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)!)
}Codifica di numeri e valori booleani
Le proprietà numeriche e booleane vengono codificate come valori letterali JSON, senza virgolette. Le stringhe sono racchiuse tra virgolette; Int, Double e 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)!)Codifica degli opzionali
Per impostazione predefinita, un opzionale nil viene omesso interamente dal JSON. Un opzionale non nullo viene codificato come valore contenuto.
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)!)Mettere insieme tutti i passaggi
Un tipico flusso di codifica consiste nel creare il valore, configurare l'encoder, chiamare encode e quindi convertire i Data in una String per la registrazione o il trasferimento.
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)!)Verifica rapida: JSONEncoder
Verifichi le Sue conoscenze sulla codifica.
Riepilogo: codifica con JSONEncoder
Ha imparato a trasformare i valori Swift in JSON:
encode(_:)restituisceData; li converta conString(data:encoding:).outputFormattingcon.prettyPrintede.sortedKeyscontrolla il layout.- Array, dizionari, tipi annidati, numeri, valori booleani e opzionali vengono tutti codificati in modo appropriato.
- Un encoder configurato può essere riutilizzato per molti valori.
Domande Frequenti
La lezione «Codifica con JSONEncoder» è gratuita?
Sì — il testo completo di «Codifica con JSONEncoder» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.
Cosa imparerò in «Codifica con JSONEncoder»?
Produci dati JSON dai valori Swift. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Swift Academy?
Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Codifica con JSONEncoder»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Swift Academy?
Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Conformità a Codable
- Codifica con JSONEncoder
- Decodifica con JSONDecoder
- Gestione di tipi optional e annidati