0Pricing
Kotlin Academy · درس

ترميز JSON وفك ترميزه

حوّلوا القيم إلى JSON ومنه

ترميز JSON وفك ترميزه درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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 وفك ترميزه» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.

ماذا ستتعلم في «ترميز JSON وفك ترميزه»؟

حوّلوا القيم إلى JSON ومنه تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟

لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «ترميز JSON وفك ترميزه»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟

نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إعداد kotlinx.serialization
  2. الفئات القابلة للتسلسل
  3. ترميز JSON وفك ترميزه
  4. Serializers مخصصة
← العودة إلى Kotlin Academy