معالجة JSON في Kotlin: دليل شامل
JSON (JavaScript Object Notation) يظل أحد أشهر صيغ تبادل البيانات في تطوير الويب والتطبيقات المحمولة والخدمات المصغرة. Kotlin، كونه لغة حديثة لـ JVM وAndroid والمشاريع متعددة المنصات، يقدم عدة أدوات قوية للعمل مع JSON. في هذه المقالة سنشرح بالتفصيل المكتبات الأساسية وإمكانياتها وأفضل الممارسات.
لماذا نحتاج مكتبة لـ JSON في Kotlin؟
على الرغم من أن Kotlin يعمل على JVM ويمكنه استخدام مكتبات Java، إلا أن حلول Kotlin الأصلية (مثل kotlinx.serialization) توفر:
- أمان الأنواع في مرحلة الترجمة
- دعم data-classes و sealed-classes
- التعددية المنصات (KMP)
- الحد الأدنى من الكود التكراري (boilerplate)
المكتبات الرئيسية للعمل مع JSON في Kotlin
1. kotlinx.serialization (موصى به)
هذه هي المكتبة الرسمية من JetBrains، المدمجة في نظام Kotlin البيئي. تدعم التعددية المنصات ولا تتطلب الانعكاس (reflection).
الإضافة (Gradle):
plugins { kotlin("jvm") version "1.9.22" kotlin("plugin.serialization") version "1.9.22"}
dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")}مثال على تحليل JSON:
import kotlinx.serialization.*import kotlinx.serialization.json.*
@Serializabledata class User( val id: Int, val name: String, val email: String, @SerialName("is_active") val isActive: Boolean = false)
fun main() { val jsonString = """ { "id": 1, "name": "إيفان بيتروف", "email": "ivan@example.com", "is_active": true } """.trimIndent()
val user = Json.decodeFromString<User>(jsonString) println("المستخدم: ${user.name}, نشط: ${user.isActive}")
// التسلسل مرة أخرى إلى JSON val jsonOutput = Json.encodeToString(user) println(jsonOutput)}2. Gson (من Google)
مكتبة Java شائعة تتكيف بسهولة مع Kotlin. مناسبة للمشاريع البسيطة بدون تعددية منصات.
مثال:
import com.google.gson.Gsonimport com.google.gson.annotations.SerializedName
data class Product( @SerializedName("product_id") val id: Int, val title: String, val price: Double)
fun main() { val gson = Gson() val json = """{"product_id": 101, "title": "لابتوب", "price": 79999.99}""" val product = gson.fromJson(json, Product::class.java) println("المنتج: ${product.title}, السعر: ${product.price} روبل") // التسلسل العكسي val jsonOut = gson.toJson(product) println(jsonOut)}3. Moshi (من Square)
بديل حديث لـ Gson بأداء أفضل ودعم لتوليد كود Kotlin.
مثال:
import com.squareup.moshi.Moshiimport com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactoryimport com.squareup.moshi.adapters.PolymorphicJsonAdapterFactory
data class Book( val isbn: String, val author: String, val year: Int)
fun main() { val moshi = Moshi.Builder() .add(KotlinJsonAdapterFactory()) .build() val adapter = moshi.adapter(Book::class.java) val json = """{"isbn": "978-5-17-123456-7", "author": "ليف تولستوي", "year": 1877}""" val book = adapter.fromJson(json) println("الكتاب: ${book?.author} - ISBN: ${book?.isbn}")}مقارنة المكتبات
- kotlinx.serialization — أفضل خيار للمشاريع الجديدة والتعددية المنصات وAndroid. يتطلب إضافة مكون إضافي للمترجم.
- Gson — سهل الاستخدام، مناسب للنماذج الأولية السريعة
أيضاً في المكتبة
معالجة Markdown في TypeScript: المكتبات، المحللات والتطبيق العملي
العمل مع XML في JavaScript (Node.js): التحليل والإنشاء والتحقق من الصحة
تحديد المواقع والخرائط في Go (Golang): المكتبات وأمثلة الكود