Swift Academy · Pelajaran

Penyahkodan dengan JSONDecoder

Hurai data JSON menjadi nilai Swift bertjenis.

Pelajaran 3 daripada 413 langkah

Penyahkodan dengan JSONDecoder ialah pelajaran Swift Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Swift Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.

Mencipta Penyahkod JSON

JSONDecoder membina semula nilai Swift daripada Data JSON. Anda memberitahunya jenis yang perlu dihasilkan dan menyerahkan bait kepadanya.

import Foundation

struct City: Codable {
    var name: String
    var population: Int
}

let json = "{\"name\":\"Oslo\",\"population\":700000}"
let data = json.data(using: .utf8)!
let city = try JSONDecoder().decode(City.self, from: data)
print(city.name, city.population)

Menghantar Jenis dengan .self

Argumen pertama ialah metajenis — ditulis sebagai MyType.self. Ini memberitahu penyahkod struktur yang perlu dibina daripada data tersebut.

import Foundation

struct Flag: Codable { var ok: Bool }

let data = "{\"ok\":true}".data(using: .utf8)!
let result = try JSONDecoder().decode(Flag.self, from: data)
print(result.ok)

Menyahkodkan Tatasusunan

Untuk menyahkodkan tatasusunan JSON, minta jenis tatasusunan seperti [Int].self atau [MyStruct].self.

import Foundation

let json = "[10, 20, 30]"
let data = json.data(using: .utf8)!
let numbers = try JSONDecoder().decode([Int].self, from: data)
print(numbers.reduce(0, +))

Menyahkodkan Objek Bersarang

Objek JSON bersarang dipetakan kepada struktur Codable bersarang. Penyahkod melintasi pepohon itu dan mengisi setiap aras untuk anda.

import Foundation

struct Coord: Codable { var lat: Double; var lon: Double }
struct Place: Codable { var name: String; var coord: Coord }

let json = "{\"name\":\"X\",\"coord\":{\"lat\":1.0,\"lon\":2.0}}"
let p = try JSONDecoder().decode(Place.self, from: json.data(using: .utf8)!)
print(p.coord.lat, p.coord.lon)

Menangkap Ralat Penyahkodan

decode akan melontarkan ralat apabila data tidak sepadan dengan jenis tersebut. Balutkannya dalam do/catch untuk mengendalikan masukan tidak sah dengan baik.

import Foundation

struct User: Codable { var name: String }

let bad = "{\"wrong\":1}".data(using: .utf8)!
do {
    let u = try JSONDecoder().decode(User.self, from: bad)
    print(u.name)
} catch {
    print("Failed:", error)
}

Ralat keyNotFound

Kegagalan yang biasa berlaku ialah DecodingError.keyNotFound, yang dilontarkan apabila kunci wajib tiada. Padankan corak ralat itu untuk melaporkan perkara yang tepat berlaku.

import Foundation

struct User: Codable { var name: String }

let bad = "{}".data(using: .utf8)!
do {
    _ = try JSONDecoder().decode(User.self, from: bad)
} catch let DecodingError.keyNotFound(key, _) {
    print("Missing key:", key.stringValue)
} catch {
    print("Other error:", error)
}

Ralat typeMismatch

Jika nilai mempunyai jenis JSON yang salah — contohnya teks sedangkan Int dijangka — penyahkod akan melontarkan DecodingError.typeMismatch.

import Foundation

struct Count: Codable { var n: Int }

let bad = "{\"n\":\"oops\"}".data(using: .utf8)!
do {
    _ = try JSONDecoder().decode(Count.self, from: bad)
} catch let DecodingError.typeMismatch(type, _) {
    print("Type mismatch, expected:", type)
} catch {
    print("Other:", error)
}

Ralat dataCorrupted

Sintaks JSON yang tidak sah akan menghasilkan DecodingError.dataCorrupted. Ini biasanya bermaksud bait tersebut langsung bukan JSON yang sah.

import Foundation

struct User: Codable { var name: String }

let bad = "not json".data(using: .utf8)!
do {
    _ = try JSONDecoder().decode(User.self, from: bad)
} catch is DecodingError {
    print("Decoding failed: data corrupted")
} catch {
    print("Other:", error)
}

Menyahkodkan Nilai Pilihan

Jika sesuatu sifat bersifat pilihan, kunci yang tiada akan dinyahkodkan menjadi nil tanpa melontarkan ralat. Ini menjadikan medan pilihan lebih bertolak ansur terhadap data yang tiada.

import Foundation

struct Profile: Codable {
    var name: String
    var bio: String?
}

let json = "{\"name\":\"Kai\"}"
let p = try JSONDecoder().decode(Profile.self, from: json.data(using: .utf8)!)
print(p.name, p.bio ?? "no bio")

Menggunakan Semula Penyahkod

Seperti pengekod, JSONDecoder yang telah dikonfigurasi boleh digunakan semula untuk banyak muatan. Simpan satu tika dan nyahkodkan masukan yang berbeza dengannya.

import Foundation

struct Word: Codable { var text: String }

let decoder = JSONDecoder()
let inputs = ["{\"text\":\"hi\"}", "{\"text\":\"bye\"}"]
for s in inputs {
    let w = try decoder.decode(Word.self, from: s.data(using: .utf8)!)
    print(w.text)
}

Nyahkod, Periksa, Gunakan

Aliran lengkap: terima Data, nyahkodkannya kepada nilai berjenis dalam do/catch, kemudian gunakan hasil berjenis kukuh itu dengan selamat.

import Foundation

struct Weather: Codable {
    var city: String
    var temp: Double
}

let json = "{\"city\":\"Rome\",\"temp\":21.5}"
do {
    let w = try JSONDecoder().decode(Weather.self, from: json.data(using: .utf8)!)
    print("\(w.city): \(w.temp)C")
} catch {
    print("Decode error:", error)
}

Semakan Pantas: Penyahkod JSON

Uji pengetahuan anda tentang penyahkodan.

Imbas Kembali: Penyahkodan dengan Penyahkod JSON

Anda telah mempelajari cara membina semula nilai Swift daripada JSON:

  • decode(MyType.self, from: data) menghasilkan nilai berjenis.
  • Tatasusunan, objek bersarang dan nilai pilihan dinyahkodkan secara automatik.
  • decode melontarkan kes DecodingError: keyNotFound, typeMismatch, dataCorrupted, valueNotFound.
  • Balut panggilan dalam do/catch untuk mengendalikan masukan tidak sah.
Percuma untuk bermula

Pelajari Swift dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
122
Pelajaran
409

Soalan Lazim

Adakah pelajaran “Penyahkodan dengan JSONDecoder” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “Penyahkodan dengan JSONDecoder”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Penyahkodan dengan JSONDecoder”?

Hurai data JSON menjadi nilai Swift bertjenis. Anda berlatih Swift Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Swift Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Swift Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Penyahkodan dengan JSONDecoder” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Mematuhi Codable
  2. Pengekodan dengan JSONEncoder
  3. Penyahkodan dengan JSONDecoder
  4. Mengendalikan Jenis Optional dan Bersarang
← Kembali ke Swift Academy