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) // AliceKodowanie 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" → firstNameOpcje 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
- URLSession data(from:) z async/await
- Codable: kodowanie i dekodowanie JSON
- Obsługa błędów i kody statusu HTTP
- Logika ponawiania i działanie URLSession w tle