การเข้ารหัสและถอดรหัส JSON
แปลงเป็นและจาก JSON
การเข้ารหัสและถอดรหัส JSON เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
ออบเจ็กต์ Json
ออบเจ็กต์ Json เป็นแกนหลักของการเข้ารหัสและถอดรหัส อินสแตนซ์เริ่มต้นพร้อมใช้งาน หรือจะสร้างอินสแตนซ์ที่กำหนดค่าเองก็ได้
import kotlinx.serialization.json.Json
val json = Jsonการเข้ารหัสเป็นสตริง
ใช้ encodeToString เพื่อแปลงออบเจ็กต์เป็นสตริง JSON
import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
@Serializable
data class Book(val title: String, val pages: Int)
fun main() {
val book = Book("Kotlin in Action", 360)
val text = Json.encodeToString(book)
println(text)
}การถอดรหัสจากสตริง
ใช้ decodeFromString เพื่อแยกวิเคราะห์ JSON กลับเป็นออบเจ็กต์ ระบบจะอนุมานชนิดเป้าหมายให้ หรือจะระบุชนิดอย่างชัดเจนก็ได้
import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
@Serializable
data class Book(val title: String, val pages: Int)
fun main() {
val text = "{\"title\":\"Atomic Kotlin\",\"pages\":500}"
val book = Json.decodeFromString<Book>(text)
println(book.title)
}การเข้ารหัสรายการ
คอลเลกชันจะถูกเข้ารหัสโดยอัตโนมัติ รายการออบเจ็กต์ที่ซีเรียลไลซ์ได้จะกลายเป็นอาร์เรย์ JSON
import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
@Serializable
data class Tag(val name: String)
fun main() {
val tags = listOf(Tag("kotlin"), Tag("json"))
println(Json.encodeToString(tags))
}การแสดงผลแบบจัดรูปแบบ
กำหนดค่าตัวสร้าง Json { } เพื่อเปิดใช้ผลลัพธ์แบบเยื้องบรรทัด ซึ่งมีประโยชน์สำหรับการบันทึกข้อมูลการทำงานและการแก้จุดบกพร่อง
import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
@Serializable
data class Point(val x: Int, val y: Int)
val pretty = Json { prettyPrint = true }
fun main() {
println(pretty.encodeToString(Point(1, 2)))
}การละเว้นคีย์ที่ไม่รู้จัก
ตามค่าเริ่มต้น การถอดรหัสจะล้มเหลวหาก JSON มีคีย์ที่ไม่มีอยู่ในคลาส ให้ตั้งค่า ignoreUnknownKeys = true เพื่อข้ามคีย์เหล่านั้น ซึ่งมีประโยชน์เมื่อ API มีการเปลี่ยนแปลง
import kotlinx.serialization.json.Json
val lenient = Json { ignoreUnknownKeys = true }การเข้ารหัสค่าเริ่มต้น
ตามค่าเริ่มต้น พร็อพเพอร์ตีที่มีค่าเท่ากับค่าเริ่มต้นจะ ไม่ ถูกเขียนลงไป ให้เปิดใช้ encodeDefaults = true เพื่อรวมพร็อพเพอร์ตีเหล่านั้นไว้เสมอ
import kotlinx.serialization.json.Json
val withDefaults = Json { encodeDefaults = true }การทำงานกับ JsonElement
สำหรับ JSON แบบไม่ตายตัว สามารถแยกวิเคราะห์เป็นต้นไม้ JsonElement แทนการใช้คลาสที่มีชนิดข้อมูลตายตัว
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonElement
fun main() {
val element: JsonElement = Json.parseToJsonElement("{\"a\":1}")
println(element)
}การอ่านฟิลด์ของ JsonObject
แปลง JsonElement เป็น JsonObject และเข้าถึงฟิลด์ด้วยคีย์ จากนั้นจึงแปลงค่าพื้นฐาน
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive
import kotlinx.serialization.json.int
fun main() {
val obj = Json.parseToJsonElement("{\"a\":1}").jsonObject
val a = obj["a"]!!.jsonPrimitive.int
println(a)
}การเข้ารหัสและถอดรหัสกลับ
การเข้ารหัสแล้วถอดรหัสควรได้ออบเจ็กต์ที่เท่ากับเดิมกลับมา ซึ่งเรียกว่าการเดินทางไปกลับ วิธีนี้เหมาะอย่างยิ่งสำหรับตรวจสอบความถูกต้องเบื้องต้นของโมเดล
import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
@Serializable
data class P(val x: Int)
fun main() {
val original = P(42)
val back = Json.decodeFromString<P>(Json.encodeToString(original))
println(original == back)
}ข้อผิดพลาดขณะถอดรหัสที่พบบ่อย
โปรดระวังข้อยกเว้นขณะรันไทม์ต่อไปนี้:
SerializationException: Unexpected JSON token— JSON มีรูปแบบไม่ถูกต้อง- ฟิลด์ที่จำเป็นหายไป — JSON ไม่มีพร็อพเพอร์ตีที่ไม่มีค่าเริ่มต้น
- คีย์ที่ไม่รู้จัก — ปิดความเข้มงวดด้วย
ignoreUnknownKeys
ตรวจสอบความเข้าใจ
API ของคุณเพิ่มฟิลด์ JSON ใหม่อยู่บ่อยครั้ง การกำหนดค่าใดช่วยไม่ให้การถอดรหัสหยุดทำงาน
ทบทวน
ขณะนี้สามารถแปลงไปมาระหว่างออบเจ็กต์กับ JSON ได้แล้ว:
encodeToString/decodeFromString- กำหนดค่าด้วย
Json { }:prettyPrint,ignoreUnknownKeys,encodeDefaults - แยกวิเคราะห์ JSON แบบไม่ตายตัวผ่าน
JsonElement
ขั้นต่อไปคือตัวซีเรียลไลเซอร์แบบกำหนดเองสำหรับชนิดข้อมูลที่ไม่รองรับ
คำถามที่พบบ่อย
บทเรียน “การเข้ารหัสและถอดรหัส JSON” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเข้ารหัสและถอดรหัส JSON” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเข้ารหัสและถอดรหัส JSON”
แปลงเป็นและจาก JSON คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การเข้ารหัสและถอดรหัส JSON” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม
ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตั้งค่า kotlinx.serialization
- คลาสที่ทำซีเรียลไลซ์ได้
- การเข้ารหัสและถอดรหัส JSON
- ซีเรียลไลเซอร์แบบกำหนดเอง