مقدمة: لماذا JSON هو أساس مطور Kotlin الحديث
\nJSON (JavaScript Object Notation) يظل المعيار الفعلي لتبادل البيانات بين الخادم والعميل، سواء كان تطبيق جوال على Android أو backend على Ktor. في نظام Kotlin، العمل مع JSON مريح بشكل خاص بفضل الكتابة الصارمة للغة والمكتبات القوية للتسلسل. في هذه المقالة، سنشرح طريقتين رئيسيتين: استخدام المكتبة الرسمية kotlinx.serialization والمكتبة الشائعة Gson. ستتعلم كيفية تحليل الهياكل المعقدة، وتسلسل الكائنات، ومعالجة الاستثناءات عمليًا.
إعداد المشروع وإضافة التبعيات
\nقبل كتابة الكود، يجب إضافة المكتبات إلى ملف build.gradle.kts (لـ Gradle). سننظر في كلا الخيارين.
الخيار 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
الخيار 2: Gson (للتوافق مع مشاريع Java)
\n- \n
- في
dependenciesأضف:implementation("com.google.code.gson:gson:2.10.1")\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.
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
\nimport 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
\nimport 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
\nimport 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
\nfun serializeWithGson(user: User): String {\n val gson = GsonBuilder().setPrettyPrinting().create()\n return gson.toJson(user)\n}<