CodingKeys สำหรับการเปลี่ยนชื่อ
จับคู่ชื่อใน JSON ที่แตกต่างจากชื่อคุณสมบัติ
CodingKeys สำหรับการเปลี่ยนชื่อ เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงต้องเปลี่ยนชื่อคีย์
API ของ JSON มักใช้ชื่อที่แตกต่างจากชื่อพร็อพเพอร์ตีใน Swift เช่น first_name กับ firstName enum CodingKeys ทำหน้าที่เชื่อมชื่อทั้งสองแบบเข้าด้วยกันโดยไม่ต้องเปลี่ยน API ของแบบจำลอง
import Foundation
struct User: Codable {
var firstName: String
enum CodingKeys: String, CodingKey {
case firstName = "first_name"
}
}
print("CodingKeys maps firstName to first_name")โครงสร้างของ CodingKeys
CodingKeys คือ enum ที่ซ้อนอยู่ภายในและสอดคล้องตาม String, CodingKey แต่ละ case จับคู่กับชื่อพร็อพเพอร์ตี ส่วนค่าดิบของ case คือคีย์ JSON ที่จะใช้
import Foundation
struct Product: Codable {
var productName: String
var unitPrice: Double
enum CodingKeys: String, CodingKey {
case productName = "product_name"
case unitPrice = "unit_price"
}
}
print(Product.CodingKeys.productName.rawValue)การถอดรหัสด้วยคีย์ที่เปลี่ยนชื่อ
ขณะถอดรหัส ตัวถอดรหัสจะค้นหาพร็อพเพอร์ตีแต่ละตัวโดยใช้ค่าดิบใน CodingKeys ดังนั้น JSON รูปแบบ snake_case จึงเติมข้อมูลลงในพร็อพเพอร์ตีแบบ camelCase ได้
import Foundation
struct User: Codable {
var firstName: String
enum CodingKeys: String, CodingKey {
case firstName = "first_name"
}
}
let json = "{\"first_name\":\"Ada\"}"
let u = try JSONDecoder().decode(User.self, from: json.data(using: .utf8)!)
print(u.firstName)การเข้ารหัสด้วยคีย์ที่เปลี่ยนชื่อ
การเข้ารหัสใช้การจับคู่แบบเดียวกันในทิศทางย้อนกลับ ดังนั้น JSON ผลลัพธ์จะมีคีย์ตามค่าดิบ ไม่ใช่ชื่อพร็อพเพอร์ตีของ Swift
import Foundation
struct User: Codable {
var firstName: String
enum CodingKeys: String, CodingKey {
case firstName = "first_name"
}
}
let data = try JSONEncoder().encode(User(firstName: "Ada"))
print(String(data: data, encoding: .utf8)!)การระบุพร็อพเพอร์ตีทั้งหมด
เมื่อเพิ่ม enum CodingKeys แล้ว enum นั้นต้องมี case สำหรับทุกพร็อพเพอร์ตีที่ต้องการเข้ารหัสหรือถอดรหัส ส่วน case ที่ไม่มีค่าดิบจะใช้ชื่อพร็อพเพอร์ตีตามเดิม
import Foundation
struct Item: Codable {
var id: Int
var displayName: String
enum CodingKeys: String, CodingKey {
case id
case displayName = "display_name"
}
}
let data = try JSONEncoder().encode(Item(id: 1, displayName: "Pen"))
print(String(data: data, encoding: .utf8)!)การละเว้นพร็อพเพอร์ตี
การไม่ใส่พร็อพเพอร์ตีไว้ใน CodingKeys จะตัดพร็อพเพอร์ตีนั้นออกจากการเข้ารหัสและถอดรหัส พร็อพเพอร์ตีดังกล่าวต้องมีค่าเริ่มต้น เพื่อให้ตัวเริ่มต้นที่สังเคราะห์ขึ้นยังสร้างชนิดข้อมูลได้
import Foundation
struct User: Codable {
var name: String
var cachedToken: String = "none"
enum CodingKeys: String, CodingKey {
case name
}
}
let u = try JSONDecoder().decode(User.self, from: "{\"name\":\"Ada\"}".data(using: .utf8)!)
print(u.name, u.cachedToken)การเปลี่ยนชื่อหลายคีย์
คุณสามารถจับคู่คีย์ได้มากเท่าที่ต้องการ แต่ละ case จะจับคู่พร็อพเพอร์ตีของ Swift กับคีย์ JSON ที่ตรงตามที่เซิร์ฟเวอร์คาดไว้
import Foundation
struct Account: Codable {
var userId: Int
var isVerified: Bool
enum CodingKeys: String, CodingKey {
case userId = "user_id"
case isVerified = "is_verified"
}
}
let json = "{\"user_id\":7,\"is_verified\":true}"
let a = try JSONDecoder().decode(Account.self, from: json.data(using: .utf8)!)
print(a.userId, a.isVerified)การจับคู่กับชื่อที่เข้าใจง่ายขึ้น
CodingKeys ไม่ได้มีไว้สำหรับรูปแบบ snake_case เท่านั้น คุณยังใช้เปลี่ยนชื่อคีย์ API ที่เข้าใจยากให้เป็นชื่อพร็อพเพอร์ตีของ Swift ที่ชัดเจนได้
import Foundation
struct Reading: Codable {
var temperature: Double
enum CodingKeys: String, CodingKey {
case temperature = "t"
}
}
let json = "{\"t\":19.5}"
let r = try JSONDecoder().decode(Reading.self, from: json.data(using: .utf8)!)
print(r.temperature)CodingKeys กับชนิดข้อมูลที่ซ้อนกัน
ชนิดข้อมูล Codable แต่ละชนิดมี CodingKeys ของตัวเอง โครงสร้างที่ซ้อนกันสามารถเปลี่ยนชื่อคีย์ของตัวเองได้อย่างอิสระจากชนิดข้อมูลภายนอก
import Foundation
struct Meta: Codable {
var createdAt: String
enum CodingKeys: String, CodingKey { case createdAt = "created_at" }
}
struct Doc: Codable { var title: String; var meta: Meta }
let json = "{\"title\":\"A\",\"meta\":{\"created_at\":\"today\"}}"
let d = try JSONDecoder().decode(Doc.self, from: json.data(using: .utf8)!)
print(d.meta.createdAt)การแปลงไปกลับด้วยคีย์ที่เปลี่ยนชื่อ
CodingKeys เดียวกันจะควบคุมทั้งสองทิศทาง ดังนั้นค่าจึงถูกเข้ารหัสเป็นรูปแบบ snake_case และถอดรหัสกลับเป็นค่า Swift เดิมได้
import Foundation
struct User: Codable {
var firstName: String
var lastName: String
enum CodingKeys: String, CodingKey {
case firstName = "first_name"
case lastName = "last_name"
}
}
let u = User(firstName: "Ada", lastName: "Lovelace")
let data = try JSONEncoder().encode(u)
let back = try JSONDecoder().decode(User.self, from: data)
print(back.firstName, back.lastName)เมื่อใดควรใช้ CodingKeys
ใช้ enum CodingKeys อย่างชัดเจนเมื่อจำเป็นต้องควบคุมคีย์แต่ละตัวอย่างแม่นยำ เมื่อมีเพียงบางคีย์ที่แตกต่างกัน หรือเมื่อต้องละเว้นพร็อพเพอร์ตี หาก API ใช้รูปแบบ snake_case อย่างสม่ำเสมอ กลยุทธ์การถอดรหัสอาจใช้งานง่ายกว่า
import Foundation
struct Event: Codable {
var eventName: String
var startTime: String
enum CodingKeys: String, CodingKey {
case eventName = "name"
case startTime = "start_time"
}
}
let json = "{\"name\":\"Launch\",\"start_time\":\"10:00\"}"
let e = try JSONDecoder().decode(Event.self, from: json.data(using: .utf8)!)
print(e.eventName, e.startTime)ตรวจสอบความเข้าใจอย่างรวดเร็ว: CodingKeys
ทดสอบความเข้าใจของคุณเกี่ยวกับการเปลี่ยนชื่อคีย์
ทบทวน: CodingKeys สำหรับการเปลี่ยนชื่อ
คุณได้เรียนรู้วิธีควบคุมคีย์อย่างแม่นยำดังนี้
- ประกาศ
enum CodingKeys: String, CodingKeyไว้ภายในชนิดข้อมูล - ค่าดิบของแต่ละ case คือคีย์ JSON และ case เหล่านี้ควบคุมทั้งการเข้ารหัสและการถอดรหัส
- ระบุพร็อพเพอร์ตีทุกตัวที่ต้องการเข้ารหัส การละเว้นพร็อพเพอร์ตีจะตัดพร็อพเพอร์ตีนั้นออก และพร็อพเพอร์ตีดังกล่าวต้องมีค่าเริ่มต้น
- ชนิดข้อมูลที่ซ้อนกันมี
CodingKeysที่เป็นอิสระของตัวเอง
คำถามที่พบบ่อย
บทเรียน “CodingKeys สำหรับการเปลี่ยนชื่อ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “CodingKeys สำหรับการเปลี่ยนชื่อ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “CodingKeys สำหรับการเปลี่ยนชื่อ”
จับคู่ชื่อใน JSON ที่แตกต่างจากชื่อคุณสมบัติ คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “CodingKeys สำหรับการเปลี่ยนชื่อ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- CodingKeys สำหรับการเปลี่ยนชื่อ
- กลยุทธ์การถอดรหัสคีย์และวันที่
- การเข้ารหัสด้วยตนเองด้วย encode(to:) และ init(from:)
- การถอดรหัส JSON ต่างชนิด