Codable: JSONin koodaus ja dekoodaus
Codable-protokollan toteuttaminen, mukautetut CodingKeys-avaimet ja sisäkkäisten säiliöiden dekoodaus.
Codable: JSONin koodaus ja dekoodaus on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 4 oppituntia.
Codable-protokolla
Codable on tyyppialias yhdistelmälle Encodable & Decodable. Yhteensopivat tyypit voidaan koodata JSONiksi ja dekoodata JSONista automaattisesti.
struct User: Codable {
var name: String
var age: Int
}Automaattinen toteutuksen muodostaminen
Swift muodostaa Codable-toteutukset automaattisesti, kun kaikki tallennetut ominaisuudet ovat itse Codable-yhteensopivia.
struct Product: Codable {
var id: Int
var title: String
var price: Double
// init(from:) and encode(to:) are auto-generated
}JSONin dekoodaaminen
Käytä JSONDecoder-tyyppiä Data-datan dekoodaamiseen omaksi Decodable-tyypiksesi.
let json = #"{"name":"Alice","age":30}"#.data(using: .utf8)!
let user = try JSONDecoder().decode(User.self, from: json)
print(user.name) // AliceKoodaaminen JSONiksi
Käytä JSONEncoder-tyyppiä Codable-arvon koodaamiseen Data-dataksi.
let user = User(name: "Bob", age: 25)
let data = try JSONEncoder().encode(user)
print(String(data: data, encoding: .utf8)!)Mukautetut CodingKeys
Käyttäkää CodingKeys-enumeraatiota Swiftin ominaisuuksien nimien ja JSON-avainten väliseen yhdistämiseen.
struct Article: Codable {
var createdAt: Date
enum CodingKeys: String, CodingKey {
case createdAt = "created_at"
}
}Päivämäärien dekoodausstrategiat
Määrittäkää JSONDecoder.dateDecodingStrategy, jotta päivämäärät voidaan jäsentää eri muodoissa.
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
let article = try decoder.decode(Article.self, from: data)Sisäkkäiset säilöt
Purkaa sisäkkäiset JSON-oliot määrittelemällä sisäkkäisiä Codable-rakenteita tai käyttämällä avainsäilöjä manuaalisesti.
struct Response: Codable {
struct Data: Codable {
var users: [User]
}
var data: Data
}
let resp = try JSONDecoder().decode(Response.self, from: json)Mukautettu dekoodauslogiikka
Ohittakaa init(from:), jos JSON-rakenne poikkeaa tavanomaisesta tai jos dekoodauksen aikana on tehtävä muunnoksia.
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
Käyttäkää .convertFromSnakeCase-strategiaa JSONin snake_case-avainten automaattiseen muuntamiseen Swiftin camelCase-ominaisuuksiksi.
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let user = try decoder.decode(User.self, from: data)
// "first_name" → firstNameKoodausasetukset
Määrittäkää JSONEncoder.outputFormatting, jos haluatte tulosteen muotoiltuna tai lajiteltuna.
let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(product)Optional-kenttien käsittely
Merkitkää ominaisuudet Optional-tyyppisiksi, jotta puuttuvat JSON-avaimet voidaan käsitellä hallitusti ilman virheen heittämistä.
struct User: Codable {
var name: String
var bio: String? // nil if "bio" key is absent from JSON
}Pikatarkistus
Mikä JSONDecoder-strategia yhdistää JSONin snake_case-avaimet automaattisesti Swiftin camelCase-ominaisuuksien nimiin?
Oppitunnin yhteenveto
Toteuttakaa Codable, jotta JSONin koodaus ja dekoodaus tapahtuvat automaattisesti. Käyttäkää CodingKeys-enumeraatiota ominaisuuksien nimien uudelleenmäärittämiseen, keyDecodingStrategy = .convertFromSnakeCase-asetusta snake_case-avaimia käyttäville rajapinnoille, mukautettua init(from:)-alustajaa poikkeaville JSON-rakenteille ja dateDecodingStrategy-asetusta päivämäärien jäsentämiseen.
Opi Swift tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 122
- Oppitunnit
- 409
Usein kysytyt kysymykset
Onko oppitunti ”Codable: JSONin koodaus ja dekoodaus” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Codable: JSONin koodaus ja dekoodaus”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Codable: JSONin koodaus ja dekoodaus”?
Codable-protokollan toteuttaminen, mukautetut CodingKeys-avaimet ja sisäkkäisten säiliöiden dekoodaus. Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Codable: JSONin koodaus ja dekoodaus”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?
Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- URLSession data(from:) async/awaitilla
- Codable: JSONin koodaus ja dekoodaus
- Virheenkäsittely ja HTTP-tilakoodit
- Uudelleenyrityslogiikka ja taustalla toimiva URLSession