Dekoding med JSONDecoder
Analyser JSON-data til typede Swift-verdier.
Dekoding med JSONDecoder er en gratis leksjon i Swift Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Swift Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Swift Academy inneholder totalt 4 leksjoner.
Opprette en JSONDecoder
JSONDecoder bygger en Swift-verdi opp igjen fra JSON-Data. Du angir hvilken type som skal produseres, og gir den bytene.
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)Sende typen med .self
Det første argumentet er metatypen, skrevet som MyType.self. Dette forteller dekoderen hvilken struktur den skal bygge fra dataene.
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)Dekoding av arrayer
For å dekode en JSON-array ber du om en arraytype, for eksempel [Int].self eller [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, +))Dekoding av nestede objekter
Nestede JSON-objekter tilsvarer nestede Codable-strukturer. Dekoderen går gjennom treet og fyller ut hvert nivå for deg.
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)Fange dekodingsfeil
decode kaster en feil når dataene ikke samsvarer med typen. Pakk kallet inn i do/catch for å håndtere ugyldige inndata på en kontrollert måte.
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)
}keyNotFound-feil
En vanlig feil er DecodingError.keyNotFound, som kastes når en påkrevd nøkkel mangler. Bruk mønstergjenkjenning på feilen for å rapportere nøyaktig hva som gikk galt.
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)
}typeMismatch-feil
Hvis en verdi har feil JSON-type – for eksempel en streng der det forventes en Int – kaster dekoderen 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)
}dataCorrupted-feil
Ugyldig JSON-syntaks utløser DecodingError.dataCorrupted. Dette betyr vanligvis at bytene ikke er gyldig JSON i det hele tatt.
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)
}Dekoding til optionals
Hvis en egenskap er optional, dekodes en manglende nøkkel til nil uten at det kastes en feil. Dette gjør optional-felter robuste overfor manglende data.
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")Gjenbruke en decoder
Akkurat som encoderen kan en konfigurert JSONDecoder gjenbrukes for mange nyttelaster. Behold én instans, og bruk den til å dekode ulike inndata.
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)
}Dekod, undersøk, bruk
En fullstendig flyt er: motta Data, dekod den til en typet verdi inni do/catch, og bruk deretter det sterkt typede resultatet på en trygg måte.
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)
}Hurtigsjekk: JSONDecoder
Test kunnskapene dine om dekoding.
Oppsummering: Dekoding med JSONDecoder
Du har lært å bygge Swift-verdier opp igjen fra JSON:
decode(MyType.self, from: data)produserer en typet verdi.- Arrayer, nestede objekter og optionals dekodes automatisk.
decodekasterDecodingError-tilfellenekeyNotFound,typeMismatch,dataCorruptedogvalueNotFound.- Pakk kall inn i
do/catchfor å håndtere ugyldige inndata.
Lær deg Swift med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 122
- Leksjoner
- 409
Ofte stilte spørsmål
Er leksjonen «Dekoding med JSONDecoder» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Swift Academy, inkludert «Dekoding med JSONDecoder», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Swift Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Dekoding med JSONDecoder»?
Analyser JSON-data til typede Swift-verdier. Du øver på Swift Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Swift Academy?
Ingen tidligere erfaring er nødvendig. Swift Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Dekoding med JSONDecoder»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Swift Academy-leksjonen?
Ja. Alle Swift Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Konformere til Codable
- Koding med JSONEncoder
- Dekoding med JSONDecoder
- Håndtere optionals og nøstede typer