0Pricing
Swift Academy · Lekcja

Codable: kodowanie i dekodowanie JSON

Zapewnianie zgodności z Codable, własne CodingKeys i dekodowanie zagnieżdżonych kontenerów.

Codable: kodowanie i dekodowanie JSON to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

Protokół Codable

Codable to alias typu dla Encodable & Decodable. Typy zgodne z tym protokołem można automatycznie kodować do formatu JSON i dekodować z formatu JSON.

struct User: Codable {
  var name: String
  var age: Int
}

Automatyczne generowanie implementacji

Swift automatycznie generuje implementacje Codable, gdy wszystkie przechowywane właściwości również są zgodne z Codable.

struct Product: Codable {
  var id: Int
  var title: String
  var price: Double
  // init(from:) and encode(to:) are auto-generated
}

Dekodowanie JSON

Należy użyć JSONDecoder, aby zdekodować Data do własnego typu Decodable.

let json = #"{"name":"Alice","age":30}"#.data(using: .utf8)!
let user = try JSONDecoder().decode(User.self, from: json)
print(user.name) // Alice

Kodowanie do JSON

Należy użyć JSONEncoder, aby zakodować wartość Codable do typu Data.

let user = User(name: "Bob", age: 25)
let data = try JSONEncoder().encode(user)
print(String(data: data, encoding: .utf8)!)

Własne CodingKeys

Użyj enuma CodingKeys, aby mapować nazwy właściwości Swift na klucze JSON i odwrotnie.

struct Article: Codable {
  var createdAt: Date
  enum CodingKeys: String, CodingKey {
    case createdAt = "created_at"
  }
}

Strategie dekodowania dat

Skonfiguruj JSONDecoder.dateDecodingStrategy, aby analizować daty w różnych formatach.

let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
let article = try decoder.decode(Article.self, from: data)

Zagnieżdżone kontenery

Dekoduj zagnieżdżone obiekty JSON, definiując zagnieżdżone struktury Codable lub ręcznie używając kontenerów kluczowanych.

struct Response: Codable {
  struct Data: Codable {
    var users: [User]
  }
  var data: Data
}
let resp = try JSONDecoder().decode(Response.self, from: json)

Własna logika dekodowania

Nadpisz init(from:) w przypadku niestandardowych struktur JSON lub aby stosować transformacje podczas dekodowania.

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

Użyj .convertFromSnakeCase, aby automatycznie konwertować klucze JSON w formacie snake_case na właściwości Swift w formacie camelCase.

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let user = try decoder.decode(User.self, from: data)
// "first_name" → firstName

Opcje kodowania

Skonfiguruj JSONEncoder.outputFormatting, aby uzyskać sformatowany lub posortowany wynik.

let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(product)

Obsługa pól opcjonalnych

Oznacz właściwości jako Optional, aby poprawnie obsługiwać brakujące klucze JSON bez zgłaszania błędu.

struct User: Codable {
  var name: String
  var bio: String?  // nil if "bio" key is absent from JSON
}

Szybkie sprawdzenie

Która strategia JSONDecoder automatycznie mapuje klucze JSON w formacie snake_case na nazwy właściwości Swift w formacie camelCase?

Podsumowanie lekcji

Zastosuj Codable, aby automatycznie kodować i dekodować JSON. Użyj CodingKeys do zmiany mapowania nazw właściwości, keyDecodingStrategy = .convertFromSnakeCase w przypadku interfejsów API używających snake_case, własnego init(from:) dla niestandardowego JSON oraz dateDecodingStrategy do analizowania dat.

Często zadawane pytania

Czy lekcja „Codable: kodowanie i dekodowanie JSON” jest bezpłatna?

Tak — pełny tekst „Codable: kodowanie i dekodowanie JSON” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Codable: kodowanie i dekodowanie JSON”?

Zapewnianie zgodności z Codable, własne CodingKeys i dekodowanie zagnieżdżonych kontenerów. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Codable: kodowanie i dekodowanie JSON”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. URLSession data(from:) z async/await
  2. Codable: kodowanie i dekodowanie JSON
  3. Obsługa błędów i kody statusu HTTP
  4. Logika ponawiania i działanie URLSession w tle
← Powrót do Swift Academy