العمل مع JSON في Kotlin: تحليل البيانات وتسلسلها

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

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

ابدأ الدورة

مقدمة في العمل مع JSON في Kotlin



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



بغض النظر عما إذا كنت تنشئ REST API، أو تعالج ردودًا من خدمات خارجية، أو تحفظ الإعدادات المحلية، فإن فهم مبادئ العمل مع JSON سيساعدك على كتابة كود أنظف وأكثر كفاءة.



أساسيات تحليل JSON في Kotlin



ما هو التسلسل (Serialization) وإلغاء التسلسل (Deserialization)؟



قبل الانتقال إلى الكود، من المهم فهم مفهومين رئيسيين:



  • التسلسل (Serialization) — تحويل كائن Kotlin (data class، قائمة، إلخ) إلى سلسلة JSON.
  • إلغاء التسلسل (Deserialization) أو التحليل (Parsing) — العملية العكسية: إنشاء كائن Kotlin من سلسلة JSON.


لا يحتوي Kotlin على دعم مدمج لـ JSON، لذلك نستخدم مكتبات خارجية. سننظر في أشهر مكتبتين.



مكتبة kotlinx.serialization



kotlinx.serialization هي المكتبة الرسمية من JetBrains، والتي تتكامل بشكل ممتاز مع لغة Kotlin. تعمل في مرحلة الترجمة (compile-time)، مما يضمن أداءً عاليًا وأمانًا في الأنواع.



إضافة المكتبة



للبدء، أضف البرنامج المساعد (plugin) في ملف build.gradle.kts:



plugins {    kotlin("plugin.serialization") version "1.9.22"}

dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")}


تعريف نموذج البيانات



لننشئ كلاسًا لتمثيل مستخدم:



import kotlinx.serialization.Serializable

@Serializabledata class User( val name: String, val age: Int, val email: String? = null, // حقل قابل للقيمة null val roles: List<String> = emptyList())


التعليمة @Serializable تخبر المترجم أن هذا الكلاس يمكن تسلسله.



التسلسل (كائن ← JSON)



import kotlinx.serialization.encodeToStringimport kotlinx.serialization.json.Json

fun main() { val user = User( name = "Anna", age = 28, email = "anna@example.com", roles = listOf("admin", "user") )

val jsonString = Json.encodeToString(user) println(jsonString) // {"name":"Anna","age":28,"email":"anna@example.com","roles":["admin","user"]}}


إلغاء التسلسل (JSON ← كائن)



import kotlinx.serialization.decodeFromString

fun main() { val json = """{"name":"Ivan","age":35,"roles":["user"]}""" val user = Json.decodeFromString<User>(json) println(user.name) // Ivan println(user.email) // null (غير محدد في JSON)}


تكوين إعدادات Json



يمكنك تخصيص سلوك المحلل (parser):



val json = Json {    prettyPrint = true          // تنسيق جميل    ignoreUnknownKeys = true    // تجاهل الحقول الإضافية في JSON    isLenient = true            // السماح بتحليل غير صارم (مثل علامات الاقتباس)}

val user = json.decodeFromString<User>(jsonString)


مكتبة Gson



Gson من Google هي مكتبة شائعة أخرى، خاصة في تطوير Android.



إضافة Gson



dependencies {    implementation("com.google.code.gson:gson:2.10.1")}


مثال على الاستخدام



import com.google.gson.Gson

data class Product( val id: Int, val title: String, val price: Double)

fun main() { val gson = Gson() val product = Product(1, "Laptop", 999.99) // التسلسل val json = gson.toJson(product) println(json) // {"id":1,"title":"Laptop","price":999.99} // إلغاء التسلسل val fromJson = gson.fromJson(json, Product::class.java) println(fromJson.title) // Laptop}

المدونات

توصيات الكتب