Swift Academy · บทเรียน

การเข้ารหัสด้วย JSONEncoder

สร้างข้อมูล JSON จากค่าของ Swift

บทเรียน 2 จาก 413 ขั้นตอน

การเข้ารหัสด้วย JSONEncoder เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

การสร้าง JSONEncoder

JSONEncoder เป็นเครื่องมือหลักที่เปลี่ยนค่าซึ่งเป็น Encodable ให้เป็น Data ในรูปแบบ JSON ให้สร้างขึ้นมาหนึ่งตัว แล้วเรียก encode(_:) กับค่าของคุณ

import Foundation

struct Movie: Codable {
    var title: String
    var year: Int
}

let encoder = JSONEncoder()
let data = try encoder.encode(Movie(title: "Up", year: 2009))
print(data.count, "bytes")

จาก Data เป็น String ที่อ่านง่าย

encode(_:) คืนค่า Data แบบไบนารี หากต้องการอ่าน ให้ถอดรหัสไบต์เป็น UTF-8 ด้วย String(data:encoding:)

import Foundation

struct Movie: Codable {
    var title: String
    var year: Int
}

let data = try JSONEncoder().encode(Movie(title: "Up", year: 2009))
let text = String(data: data, encoding: .utf8)!
print(text)

ผลลัพธ์แบบจัดรูปแบบสวยงาม

โดยค่าเริ่มต้น JSON จะอยู่ในรูปแบบกะทัดรัด ให้ตั้งค่า outputFormatting = .prettyPrinted เพื่อเพิ่มการเยื้องและการขึ้นบรรทัดใหม่ ทำให้ผลลัพธ์อ่านได้ง่ายสำหรับมนุษย์

import Foundation

struct Movie: Codable {
    var title: String
    var year: Int
}

let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let data = try encoder.encode(Movie(title: "Up", year: 2009))
print(String(data: data, encoding: .utf8)!)

คีย์เรียงลำดับเพื่อผลลัพธ์ที่คงที่

คุณสามารถรวมตัวเลือกต่าง ๆ ด้วยอาร์เรย์ การเพิ่ม .sortedKeys จะเรียงคีย์ตามตัวอักษร ทำให้ผลลัพธ์มีค่าแน่นอน เหมาะอย่างยิ่งสำหรับการทดสอบและภาพบันทึกผลลัพธ์

import Foundation

struct Movie: Codable {
    var title: String
    var year: Int
    var rating: Double
}

let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(Movie(title: "Up", year: 2009, rating: 4.8))
print(String(data: data, encoding: .utf8)!)

การเข้ารหัสอาร์เรย์

คุณสามารถเข้ารหัสชุดข้อมูลได้โดยตรง อาร์เรย์ของค่าที่เป็น Encodable จะกลายเป็นอาร์เรย์ JSON

import Foundation

struct Movie: Codable {
    var title: String
    var year: Int
}

let list = [Movie(title: "Up", year: 2009),
            Movie(title: "Coco", year: 2017)]
let data = try JSONEncoder().encode(list)
print(String(data: data, encoding: .utf8)!)

การเข้ารหัสพจนานุกรม

พจนานุกรม [String: Encodable-element] จะถูกเข้ารหัสเป็นออบเจ็กต์ JSON โปรดทราบว่าลำดับคีย์ไม่รับประกัน เว้นแต่คุณจะเพิ่ม .sortedKeys

import Foundation

let scores: [String: Int] = ["alice": 90, "bob": 75]
let encoder = JSONEncoder()
encoder.outputFormatting = .sortedKeys
let data = try encoder.encode(scores)
print(String(data: data, encoding: .utf8)!)

การเข้ารหัสโครงสร้างที่ซ้อนกัน

ชนิดข้อมูล Codable ที่ซ้อนกันจะถูกเข้ารหัสแบบเรียกซ้ำ ทำให้สร้างออบเจ็กต์ JSON ที่ซ้อนกันได้โดยอัตโนมัติ

import Foundation

struct Author: Codable { var name: String }
struct Post: Codable {
    var title: String
    var author: Author
}

let p = Post(title: "Hello", author: Author(name: "Mae"))
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
print(String(data: try encoder.encode(p), encoding: .utf8)!)

การใช้ตัวเข้ารหัสซ้ำ

คุณสามารถใช้ JSONEncoder ที่กำหนดค่าแล้วซ้ำกับค่าหลายค่าได้ กำหนดค่าเพียงครั้งเดียว แล้วใช้รูปแบบเดียวกันต่อไปตลอดโค้ดของคุณ

import Foundation

struct Tag: Codable { var name: String }

let encoder = JSONEncoder()
encoder.outputFormatting = .sortedKeys
for t in [Tag(name: "swift"), Tag(name: "json")] {
    let data = try encoder.encode(t)
    print(String(data: data, encoding: .utf8)!)
}

การเข้ารหัสตัวเลขและค่าบูลีน

พร็อพเพอร์ตีตัวเลขและค่าบูลีนจะถูกเข้ารหัสเป็นค่าตามตัวอักษรของ JSON โดยไม่มีเครื่องหมายคำพูด ส่วนสตริงจะมีเครื่องหมายคำพูด ขณะที่ Int, Double และ Bool จะไม่มี

import Foundation

struct Stats: Codable {
    var count: Int
    var ratio: Double
    var enabled: Bool
}

let data = try JSONEncoder().encode(Stats(count: 3, ratio: 0.75, enabled: true))
print(String(data: data, encoding: .utf8)!)

การเข้ารหัสค่าออปชันนัล

โดยค่าเริ่มต้น ค่าออปชันนัลที่เป็น nil จะถูกละเว้นจาก JSON ทั้งหมด ส่วนค่าออปชันนัลที่ไม่ใช่ nil จะถูกเข้ารหัสเป็นค่าที่ห่อหุ้มอยู่

import Foundation

struct Item: Codable {
    var name: String
    var note: String?
}

let data = try JSONEncoder().encode(Item(name: "Pen", note: nil))
print(String(data: data, encoding: .utf8)!)

นำทุกอย่างมาประกอบกัน

ลำดับการเข้ารหัสทั่วไปคือ สร้างค่า กำหนดค่าตัวเข้ารหัส เรียก encode แล้วแปลง Data เป็น String เพื่อบันทึกข้อมูลหรือส่งต่อ

import Foundation

struct Order: Codable {
    var id: Int
    var items: [String]
}

let order = Order(id: 42, items: ["a", "b"])
let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(order)
print(String(data: data, encoding: .utf8)!)

ตรวจสอบความเข้าใจอย่างรวดเร็ว: JSONEncoder

ทดสอบความรู้ของคุณเกี่ยวกับการเข้ารหัส

ทบทวน: การเข้ารหัสด้วย JSONEncoder

คุณได้เรียนรู้วิธีเปลี่ยนค่าของ Swift ให้เป็น JSON ดังนี้

  • encode(_:) คืนค่าเป็น Data ซึ่งแปลงได้ด้วย String(data:encoding:)
  • outputFormatting ร่วมกับ .prettyPrinted และ .sortedKeys ใช้ควบคุมรูปแบบการจัดวาง
  • อาร์เรย์ พจนานุกรม ชนิดข้อมูลที่ซ้อนกัน ตัวเลข ค่าบูลีน และค่าออปชันนัล ล้วนถูกเข้ารหัสได้อย่างเหมาะสม
  • ตัวเข้ารหัสที่กำหนดค่าแล้วสามารถใช้ซ้ำกับค่าจำนวนมากได้
เริ่มต้นได้ฟรี

เรียนรู้ Swift ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
122
บทเรียน
409

คำถามที่พบบ่อย

บทเรียน “การเข้ารหัสด้วย JSONEncoder” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การเข้ารหัสด้วย JSONEncoder” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การเข้ารหัสด้วย JSONEncoder”

สร้างข้อมูล JSON จากค่าของ Swift คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การเข้ารหัสด้วย JSONEncoder” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม

ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. การทำให้สอดคล้องกับ Codable
  2. การเข้ารหัสด้วย JSONEncoder
  3. การถอดรหัสด้วย JSONDecoder
  4. การจัดการชนิดค่าเสริมและชนิดซ้อนกัน
← กลับไปที่ Swift Academy