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

การเข้ารหัสและถอดรหัส 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. การตั้งค่า kotlinx.serialization
  2. คลาสที่ทำซีเรียลไลซ์ได้
  3. การเข้ารหัสและถอดรหัส JSON
  4. ซีเรียลไลเซอร์แบบกำหนดเอง
← กลับไปที่ Kotlin Academy