Swift Academy · Lektion

Codable: koda och avkoda JSON

Låt typer uppfylla Codable och använd anpassade CodingKeys och avkodning med nästlade containers.

Lektion 2 av 413 steg

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) // Alice

Koda 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" → firstName

Kodningsalternativ

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.

Gratis att börja

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

  1. URLSession data(from:) med async/await
  2. Codable: koda och avkoda JSON
  3. Felhantering och HTTP-statuskoder
  4. Försökslogik och URLSession i bakgrunden
← Tillbaka till Swift Academy