Swift Academy · Oppitunti

Codable: JSONin koodaus ja dekoodaus

Codable-protokollan toteuttaminen, mukautetut CodingKeys-avaimet ja sisäkkäisten säiliöiden dekoodaus.

Oppitunti 2/413 vaihetta

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

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

Koodausasetukset

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.

Aloita maksutta

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

  1. URLSession data(from:) async/awaitilla
  2. Codable: JSONin koodaus ja dekoodaus
  3. Virheenkäsittely ja HTTP-tilakoodit
  4. Uudelleenyrityslogiikka ja taustalla toimiva URLSession
← Takaisin: Swift Academy