การเข้ารหัสด้วย JSONEncoder
สร้างข้อมูล JSON จากค่าของ Swift
การเข้ารหัสด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การทำให้สอดคล้องกับ Codable
- การเข้ารหัสด้วย JSONEncoder
- การถอดรหัสด้วย JSONDecoder
- การจัดการชนิดค่าเสริมและชนิดซ้อนกัน