Penyahkodan dengan JSONDecoder
Hurai data JSON menjadi nilai Swift bertjenis.
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.
decodemelontarkan kesDecodingError:keyNotFound,typeMismatch,dataCorrupted,valueNotFound.- Balut panggilan dalam
do/catchuntuk mengendalikan masukan tidak sah.
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
- Mematuhi Codable
- Pengekodan dengan JSONEncoder
- Penyahkodan dengan JSONDecoder
- Mengendalikan Jenis Optional dan Bersarang