معالجة JSON في Kotlin: نظرة عامة على المكتبات وأمثلة عملية
JSON (JavaScript Object Notation) يظل أحد أكثر التنسيقات شيوعًا لتبادل البيانات بين العميل والخادم. في لغة Kotlin، التي تُستخدم بنشاط لتطوير تطبيقات Android والحلول الخادمية، توجد عدة مكتبات قوية للعمل مع JSON. في هذه المقالة، سنشرح بالتفصيل الأدوات الرئيسية: kotlinx.serialization وGson وMoshi وKlaxon. ستتعلم كيفية تحليل JSON، وتسلسل الكائنات، ومعالجة البيانات بكفاءة.
1. kotlinx.serialization — النهج الأصلي من JetBrains
kotlinx.serialization هي المكتبة الرسمية من مبتكري Kotlin. ميزتها الرئيسية هي التكامل الكامل مع نظام أنواع اللغة ودعم المنصات المتعددة (KMM). للعمل، ستحتاج إلى إضافة المكون الإضافي في 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.Serializableimport kotlinx.serialization.json.Json
@Serializabledata class User(val id: Int, val name: String, val email: String)
fun main() { val jsonString = """{"id":1,"name":"آنا","email":"anna@example.com"}""" // إلغاء التسلسل val user = Json.decodeFromString<User>(jsonString) println("المستخدم: ${user.name}, البريد الإلكتروني: ${user.email}") // التسلسل val output = Json.encodeToString(user) println(output)}الميزات:
- لا يتطلب انعكاسًا (يعمل في مرحلة الترجمة).
- يدعم المسلسلات المخصصة وتعدد الأشكال.
- مناسب تمامًا لـ Kotlin Multiplatform Mobile.
2. Gson — الكلاسيكية من Google
مكتبة 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 json = """{"id":101,"title":"لابتوب","price":79990.0}""" // التحليل val product = gson.fromJson(json, Product::class.java) println("المنتج: ${product.title}, السعر: ${product.price}") // التحويل العكسي val newJson = gson.toJson(product) println(newJson)}الإيجابيات والسلبيات:
- + الحد الأدنى من الكود للسيناريوهات الأساسية.
- + دعم التعليقات التوضيحية
@SerializedNameلرسم خرائط الحقول. - - استخدام الانعكاس قد يقلل الأداء.
- - مشاكل في معالجة
nullوالأنواع العامة.
3. Moshi — البديل الحديث من Square
Moshi تم إنشاؤها كبديل أكثر أمانًا وسرعة لـ Gson. تستخدم أيضًا الانعكاس، ولكنها توفر توليد الكود من خلال التعليق التوضيحي @JsonClass. الإضافة:
dependencies { implementation("com.squareup.moshi:moshi-kotlin:1.15.0") ksp("com.squareup.moshi:moshi-kotlin-codegen:1.15.0")}مثال على الاستخدام مع توليد الكود:
import com.squareup.moshi.JsonClassimport com.squareup.moshi.Moshi
@JsonClass(generateAdapter = true)data class Book(val isbn: String, val author: String, val year: Int)
fun main() { val moshi = Moshi.Builder().build() val adapter = moshi.adapter(Book::class.java) val json = """{"isbn":"978-5-17-123456-7","autho