Codable: การเข้ารหัสและถอดรหัส JSON
ทำให้สอดคล้องกับ Codable ใช้ CodingKeys แบบกำหนดเอง และถอดรหัสคอนเทนเนอร์ที่ซ้อนกัน
Codable: การเข้ารหัสและถอดรหัส JSON เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
โพรโทคอล Codable
Codable เป็นชื่อแทนชนิดของ Encodable & Decodable ชนิดที่ทำตามโพรโทคอลนี้สามารถเข้ารหัสเป็น JSON และถอดรหัสจาก JSON ได้โดยอัตโนมัติ
struct User: Codable {
var name: String
var age: Int
}การสร้างโค้ดอัตโนมัติ
Swift จะสร้างการใช้งาน Codable ให้โดยอัตโนมัติ เมื่อคุณสมบัติที่จัดเก็บทั้งหมดทำตาม Codable เช่นกัน
struct Product: Codable {
var id: Int
var title: String
var price: Double
// init(from:) and encode(to:) are auto-generated
}การถอดรหัส JSON
ใช้ JSONDecoder เพื่อถอดรหัส Data ให้เป็นชนิด Decodable ของคุณ
let json = #"{"name":"Alice","age":30}"#.data(using: .utf8)!
let user = try JSONDecoder().decode(User.self, from: json)
print(user.name) // Aliceการเข้ารหัสเป็น JSON
ใช้ JSONEncoder เพื่อเข้ารหัสค่า Codable ให้เป็น Data
let user = User(name: "Bob", age: 25)
let data = try JSONEncoder().encode(user)
print(String(data: data, encoding: .utf8)!)CodingKeys แบบกำหนดเอง
ใช้ชนิดแจกแจง CodingKeys เพื่อแมประหว่างชื่อพร็อพเพอร์ตีของ Swift กับคีย์ JSON
struct Article: Codable {
var createdAt: Date
enum CodingKeys: String, CodingKey {
case createdAt = "created_at"
}
}กลยุทธ์การถอดรหัสวันที่
กำหนดค่า JSONDecoder.dateDecodingStrategy เพื่อแยกวิเคราะห์วันที่ในรูปแบบต่าง ๆ
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
let article = try decoder.decode(Article.self, from: data)คอนเทนเนอร์แบบซ้อน
ถอดรหัสออบเจ็กต์ JSON แบบซ้อนโดยกำหนดโครงสร้าง Codable แบบซ้อน หรือใช้คอนเทนเนอร์ที่มีคีย์ด้วยตนเอง
struct Response: Codable {
struct Data: Codable {
var users: [User]
}
var data: Data
}
let resp = try JSONDecoder().decode(Response.self, from: json)ตรรกะการถอดรหัสแบบกำหนดเอง
เขียนทับ init(from:) สำหรับโครงสร้าง JSON ที่ไม่เป็นมาตรฐาน หรือเพื่อใช้การแปลงระหว่างการถอดรหัส
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
ใช้ .convertFromSnakeCase เพื่อแปลงคีย์ JSON แบบ snake_case เป็นพร็อพเพอร์ตีแบบ camelCase ของ Swift โดยอัตโนมัติ
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let user = try decoder.decode(User.self, from: data)
// "first_name" → firstNameตัวเลือกการเข้ารหัส
กำหนดค่า JSONEncoder.outputFormatting สำหรับผลลัพธ์ที่จัดรูปแบบให้อ่านง่ายหรือเรียงลำดับแล้ว
let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(product)การจัดการฟิลด์ที่ไม่มีค่า
กำหนดพร็อพเพอร์ตีเป็นชนิดค่าที่เลือกได้ เพื่อจัดการคีย์ JSON ที่หายไปอย่างเหมาะสมโดยไม่ทำให้เกิดข้อผิดพลาด
struct User: Codable {
var name: String
var bio: String? // nil if "bio" key is absent from JSON
}ตรวจสอบอย่างรวดเร็ว
กลยุทธ์ของ JSONDecoder ใดที่แมปคีย์ JSON แบบ snake_case เป็นชื่อพร็อพเพอร์ตีแบบ camelCase โดยอัตโนมัติ
สรุปบทเรียน
ทำให้ชนิดข้อมูลสอดคล้องกับ Codable เพื่อเข้ารหัสและถอดรหัส JSON โดยอัตโนมัติ ใช้ CodingKeys เพื่อเปลี่ยนชื่อพร็อพเพอร์ตี ใช้ keyDecodingStrategy = .convertFromSnakeCase สำหรับ API ที่ใช้ snake_case ใช้ init(from:) แบบกำหนดเองสำหรับ JSON ที่ไม่เป็นมาตรฐาน และใช้ dateDecodingStrategy สำหรับการแยกวิเคราะห์วันที่
คำถามที่พบบ่อย
บทเรียน “Codable: การเข้ารหัสและถอดรหัส JSON” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “Codable: การเข้ารหัสและถอดรหัส JSON” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “Codable: การเข้ารหัสและถอดรหัส JSON”
ทำให้สอดคล้องกับ Codable ใช้ CodingKeys แบบกำหนดเอง และถอดรหัสคอนเทนเนอร์ที่ซ้อนกัน คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “Codable: การเข้ารหัสและถอดรหัส JSON” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- URLSession data(from:) พร้อม async/await
- Codable: การเข้ารหัสและถอดรหัส JSON
- การจัดการข้อผิดพลาดและรหัสสถานะ HTTP
- ตรรกะการลองใหม่และ URLSession เบื้องหลัง