Codable: koda och avkoda JSON
Låt typer uppfylla Codable och använd anpassade CodingKeys och avkodning med nästlade containers.
Codable: koda och avkoda JSON är en gratis lektion i Swift Academy på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Swift Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Swift Academy innehåller totalt 4 lektioner.
Codable-protokollet
Codable är ett typalias för Encodable & Decodable. Typer som följer protokollen kan automatiskt kodas till och avkodas från JSON.
struct User: Codable {
var name: String
var age: Int
}Automatisk syntes
Swift syntetiserar implementationer av Codable när alla lagrade egenskaper själva är Codable.
struct Product: Codable {
var id: Int
var title: String
var price: Double
// init(from:) and encode(to:) are auto-generated
}Avkoda JSON
Använd JSONDecoder för att avkoda Data till din Decodable-typ.
let json = #"{"name":"Alice","age":30}"#.data(using: .utf8)!
let user = try JSONDecoder().decode(User.self, from: json)
print(user.name) // AliceKoda till JSON
Använd JSONEncoder för att koda ett Codable-värde till Data.
let user = User(name: "Bob", age: 25)
let data = try JSONEncoder().encode(user)
print(String(data: data, encoding: .utf8)!)Anpassade CodingKeys
Använd en CodingKeys-enum för att mappa mellan Swift-egenskapsnamn och JSON-nycklar.
struct Article: Codable {
var createdAt: Date
enum CodingKeys: String, CodingKey {
case createdAt = "created_at"
}
}Strategier för datumavkodning
Konfigurera JSONDecoder.dateDecodingStrategy för att tolka datum i olika format.
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
let article = try decoder.decode(Article.self, from: data)Kapslade containrar
Avkoda kapslade JSON-objekt genom att definiera kapslade Codable-strukturer eller använda nycklade containrar manuellt.
struct Response: Codable {
struct Data: Codable {
var users: [User]
}
var data: Data
}
let resp = try JSONDecoder().decode(Response.self, from: json)Anpassad avkodningslogik
Åsidosätt init(from:) för JSON-strukturer som avviker från standarden eller för att tillämpa omvandlingar under avkodningen.
struct Rating: Codable {
var stars: Int
init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
let raw = try container.decode(Double.self)
stars = Int(raw.rounded())
}
func encode(to encoder: Encoder) throws {
var container = encoder.singleValueContainer()
try container.encode(Double(stars))
}
}keyDecodingStrategy
Använd .convertFromSnakeCase för att automatiskt omvandla JSON-nycklar i snake_case till Swift-egenskaper i camelCase.
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let user = try decoder.decode(User.self, from: data)
// "first_name" → firstNameKodningsalternativ
Konfigurera JSONEncoder.outputFormatting för läsbart formaterad eller sorterad utdata.
let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(product)Hantera Optional-fält
Markera egenskaper som Optional för att hantera saknade JSON-nycklar utan att ett fel kastas.
struct User: Codable {
var name: String
var bio: String? // nil if "bio" key is absent from JSON
}Snabb kontroll
Vilken JSONDecoder-strategi mappar automatiskt JSON-nycklar i snake_case till egenskapsnamn i Swift i camelCase?
Sammanfattning av lektionen
Anpassa typer till Codable för automatisk JSON-kodning och -avkodning. Använd CodingKeys för att mappa om egenskapsnamn, keyDecodingStrategy = .convertFromSnakeCase för API:er med snake_case, anpassad init(from:) för JSON som avviker från standarden och dateDecodingStrategy för att tolka datum.
Lär dig Swift med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 122
- Lektioner
- 409
Vanliga frågor
Är lektionen ”Codable: koda och avkoda JSON” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Swift Academy, inklusive ”Codable: koda och avkoda JSON”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Swift Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Codable: koda och avkoda JSON”?
Låt typer uppfylla Codable och använd anpassade CodingKeys och avkodning med nästlade containers. Ni övar på Swift Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Swift Academy?
Du behöver inga förkunskaper. Utbildningen i Swift Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Codable: koda och avkoda JSON”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Swift Academy-lektionen?
Ja. Varje Swift Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- URLSession data(from:) med async/await
- Codable: koda och avkoda JSON
- Felhantering och HTTP-statuskoder
- Försökslogik och URLSession i bakgrunden