Swift Academy · Oppitunti

Koodaus JSONEncoderilla

Tuota Swift-arvoista JSON-dataa.

Oppitunti 2/413 vaihetta

Koodaus JSONEncoderilla 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.

JSONEncoder-kooderin luominen

JSONEncoder on keskeinen työkalu, joka muuntaa minkä tahansa Encodable-arvon JSON-muotoiseksi Data-tietosisällöksi. Luokaa kooderi ja kutsukaa sitten arvolla encode(_:)-metodia.

import Foundation

struct Movie: Codable {
    var title: String
    var year: Int
}

let encoder = JSONEncoder()
let data = try encoder.encode(Movie(title: "Up", year: 2009))
print(data.count, "bytes")

Datasta luettavaksi merkkijonoksi

encode(_:) palauttaa binäärimuotoista Data-tietosisältöä. Lukekaa se purkamalla tavut UTF-8-muotoon String(data:encoding:)-metodilla.

import Foundation

struct Movie: Codable {
    var title: String
    var year: Int
}

let data = try JSONEncoder().encode(Movie(title: "Up", year: 2009))
let text = String(data: data, encoding: .utf8)!
print(text)

Kauniisti muotoiltu tuloste

JSON on oletusarvoisesti tiivistä. Asettakaa outputFormatting = .prettyPrinted, jotta tulosteeseen lisätään sisennykset ja rivinvaihdot ja tuloksesta tulee ihmiselle helposti luettava.

import Foundation

struct Movie: Codable {
    var title: String
    var year: Int
}

let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let data = try encoder.encode(Movie(title: "Up", year: 2009))
print(String(data: data, encoding: .utf8)!)

Lajitellut avaimet vakaata tulostetta varten

Voitte yhdistää asetuksia taulukon avulla. Kun lisäätte .sortedKeys-asetuksen, avaimet järjestetään aakkosjärjestykseen, jolloin tulosteesta tulee deterministinen — tämä sopii erinomaisesti testeihin ja tilannevedoksiin.

import Foundation

struct Movie: Codable {
    var title: String
    var year: Int
    var rating: Double
}

let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(Movie(title: "Up", year: 2009, rating: 4.8))
print(String(data: data, encoding: .utf8)!)

Taulukoiden koodaaminen

Voitte koodata kokoelmia suoraan. Encodable-arvoja sisältävä taulukko muuttuu JSON-taulukoksi.

import Foundation

struct Movie: Codable {
    var title: String
    var year: Int
}

let list = [Movie(title: "Up", year: 2009),
            Movie(title: "Coco", year: 2017)]
let data = try JSONEncoder().encode(list)
print(String(data: data, encoding: .utf8)!)

Sanakirjojen koodaaminen

[String: Encodable-element]-sanakirja koodataan JSON-objektiksi. Huomioikaa, että avainten järjestystä ei taata, ellette lisää .sortedKeys-asetusta.

import Foundation

let scores: [String: Int] = ["alice": 90, "bob": 75]
let encoder = JSONEncoder()
encoder.outputFormatting = .sortedKeys
let data = try encoder.encode(scores)
print(String(data: data, encoding: .utf8)!)

Sisäkkäisten rakenteiden koodaaminen

Sisäkkäiset Codable-tyypit koodataan rekursiivisesti, joten sisäkkäiset JSON-objektit syntyvät automaattisesti.

import Foundation

struct Author: Codable { var name: String }
struct Post: Codable {
    var title: String
    var author: Author
}

let p = Post(title: "Hello", author: Author(name: "Mae"))
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
print(String(data: try encoder.encode(p), encoding: .utf8)!)

Kooderin uudelleenkäyttö

Määritettyä JSONEncoder-kooderia voi käyttää uudelleen useille arvoille. Määrittäkää asetukset kerran ja käyttäkää samaa muotoilua koko koodissanne.

import Foundation

struct Tag: Codable { var name: String }

let encoder = JSONEncoder()
encoder.outputFormatting = .sortedKeys
for t in [Tag(name: "swift"), Tag(name: "json")] {
    let data = try encoder.encode(t)
    print(String(data: data, encoding: .utf8)!)
}

Lukujen ja totuusarvojen koodaaminen

Luku- ja totuusarvo-ominaisuudet koodataan JSON-literaaleina ilman lainausmerkkejä. Merkkijonot ympäröidään lainausmerkeillä, mutta Int-, Double- ja Bool-arvoja ei.

import Foundation

struct Stats: Codable {
    var count: Int
    var ratio: Double
    var enabled: Bool
}

let data = try JSONEncoder().encode(Stats(count: 3, ratio: 0.75, enabled: true))
print(String(data: data, encoding: .utf8)!)

Optionaalien koodaaminen

Oletusarvoisesti nil-arvoinen optional jätetään kokonaan pois JSONista. Arvon sisältävä optional koodataan sisältämänsä arvon muodossa.

import Foundation

struct Item: Codable {
    var name: String
    var note: String?
}

let data = try JSONEncoder().encode(Item(name: "Pen", note: nil))
print(String(data: data, encoding: .utf8)!)

Kokonaisuuden yhdistäminen

Tyypillinen koodauksen kulku on seuraava: muodostetaan arvo, määritetään kooderin asetukset, kutsutaan encode-metodia ja muunnetaan sitten Data String-merkkijonoksi lokitusta tai siirtoa varten.

import Foundation

struct Order: Codable {
    var id: Int
    var items: [String]
}

let order = Order(id: 42, items: ["a", "b"])
let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(order)
print(String(data: data, encoding: .utf8)!)

Pikatarkistus: JSONEncoder

Testatkaa tietonne koodaamisesta.

Kertaus: Koodaaminen JSONEncoderilla

Opitte muuntamaan Swift-arvoja JSONiksi:

  • encode(_:) palauttaa Data-tietosisällön, joka muunnetaan String(data:encoding:)-metodilla.
  • outputFormatting yhdessä asetusten .prettyPrinted ja .sortedKeys kanssa määrittää ulkoasun.
  • Taulukot, sanakirjat, sisäkkäiset tyypit, luvut, totuusarvot ja optionalit koodataan kaikki järkevästi.
  • Määritettyä kooderia voi käyttää uudelleen useille arvoille.
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 ”Koodaus JSONEncoderilla” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Koodaus JSONEncoderilla”. 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 ”Koodaus JSONEncoderilla”?

Tuota Swift-arvoista JSON-dataa. 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 ”Koodaus JSONEncoderilla”-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. Codable-protokollan toteuttaminen
  2. Koodaus JSONEncoderilla
  3. Dekoodaus JSONDecoderilla
  4. Optionaalien ja sisäkkäisten tyyppien käsittely
← Takaisin: Swift Academy