0Pricing
Swift Academy · บทเรียน

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. URLSession data(from:) พร้อม async/await
  2. Codable: การเข้ารหัสและถอดรหัส JSON
  3. การจัดการข้อผิดพลาดและรหัสสถานะ HTTP
  4. ตรรกะการลองใหม่และ URLSession เบื้องหลัง
← กลับไปที่ Swift Academy