العمل مع JSON في Kotlin: التحليل والتسلسل عمليًا

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا JSON هو أساس مطور Kotlin الحديث

\n

JSON (JavaScript Object Notation) يظل المعيار الفعلي لتبادل البيانات بين الخادم والعميل، سواء كان تطبيق جوال على Android أو backend على Ktor. في نظام Kotlin، العمل مع JSON مريح بشكل خاص بفضل الكتابة الصارمة للغة والمكتبات القوية للتسلسل. في هذه المقالة، سنشرح طريقتين رئيسيتين: استخدام المكتبة الرسمية kotlinx.serialization والمكتبة الشائعة Gson. ستتعلم كيفية تحليل الهياكل المعقدة، وتسلسل الكائنات، ومعالجة الاستثناءات عمليًا.

\n\n

إعداد المشروع وإضافة التبعيات

\n

قبل كتابة الكود، يجب إضافة المكتبات إلى ملف build.gradle.kts (لـ Gradle). سننظر في كلا الخيارين.

\n\n

الخيار 1: kotlinx.serialization (موصى به)

\n
    \n
  • أضف الإضافة في plugins: kotlin("plugin.serialization") version "1.9.22"
  • \n
  • في dependencies حدد: implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")
  • \n
\n\n

الخيار 2: Gson (للتوافق مع مشاريع Java)

\n
    \n
  • في dependencies أضف: implementation("com.google.code.gson:gson:2.10.1")
  • \n
\n\n
// build.gradle.kts — مثال كامل لـ kotlinx.serialization\nplugins {\n    kotlin("jvm") version "1.9.22"\n    kotlin("plugin.serialization") version "1.9.22"\n}\n\ndependencies {\n    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")\n}
\n\n

تحليل JSON في Kotlin: من البسيط إلى المعقد

\n

التحليل (إزالة التسلسل) هو تحويل سلسلة JSON إلى كائن Kotlin. سنشرح باستخدام مثال بيانات المستخدم.

\n\n

مثال البيانات

\n
{\n  "id": 123,\n  "name": "آنا",\n  "email": "anna@example.com",\n  "active": true\n}
\n\n

إنشاء Data Class

\n

يتم استخدام نفس الفئة لكلتا المكتبتين. مهم: بالنسبة لـ kotlinx.serialization، يجب إضافة التعليق التوضيحي @Serializable.

\n
import kotlinx.serialization.Serializable\n\n@Serializable\ndata class User(\n    val id: Int,\n    val name: String,\n    val email: String,\n    val active: Boolean\n)
\n\n

التحليل باستخدام kotlinx.serialization

\n
import kotlinx.serialization.json.Json\n\nfun parseWithKotlinx(jsonString: String): User {\n    val json = Json { ignoreUnknownKeys = true } // تجاهل الحقول غير المعروفة\n    return json.decodeFromString<User>(jsonString)\n}\n\n// الاستخدام:\nfun main() {\n    val json = """{"id":123,"name":"آنا","email":"anna@example.com","active":true}"""\n    val user = parseWithKotlinx(json)\n    println(user.name) // آنا\n}
\n\n

التحليل باستخدام Gson

\n
import com.google.gson.Gson\n\nfun parseWithGson(jsonString: String): User {\n    val gson = Gson()\n    return gson.fromJson(jsonString, User::class.java)\n}\n\n// الاستخدام:\nfun main() {\n    val json = """{"id":123,"name":"آنا","email":"anna@example.com","active":true}"""\n    val user = parseWithGson(json)\n    println(user.email) // anna@example.com\n}
\n\n

التسلسل: تحويل الكائن إلى JSON

\n

العملية العكسية — إنشاء سلسلة JSON من الكائن — لا تقل أهمية لإرسال البيانات إلى الخادم.

\n\n

التسلسل باستخدام kotlinx.serialization

\n
import kotlinx.serialization.encodeToString\n\nfun serializeWithKotlinx(user: User): String {\n    val json = Json { prettyPrint = true }\n    return json.encodeToString(user)\n}\n\n// النتيجة:\n// {\n//   "id": 123,\n//   "name": "آنا",\n//   "email": "anna@example.com",\n//   "active": true\n// }
\n\n

التسلسل باستخدام Gson

\n
fun serializeWithGson(user: User): String {\n    val gson = GsonBuilder().setPrettyPrinting().create()\n    return gson.toJson(user)\n}<                

المدونات

توصيات الكتب