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

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

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

ابدأ الدورة

مقدمة: لماذا يتعامل Kotlin مع JSON؟

\n\n

JSON (JavaScript Object Notation) هو تنسيق خفيف لتبادل البيانات أصبح معيارًا لتطبيقات الويب الحديثة وواجهات برمجة التطبيقات (API). إذا كنت تكتب بلغة Kotlin، سواء كان تطبيق Android أو جزء خادم، فستحتاج عاجلاً أم آجلاً إلى تحليل استجابات JSON من الخادم أو تسلسل كائناتك لإرسالها.

\n\n

Kotlin هي لغة حديثة تعمل فوق JVM ومتوافقة تمامًا مع Java. ومع ذلك، تمتلك Kotlin أدواتها القوية للعمل مع JSON، مما يجعل الكود أكثر إيجازًا وأمانًا. في هذه المقالة، سنناقش الطريقتين الأكثر شيوعًا: استخدام المكتبة الرسمية kotlinx.serialization والمكتبة المجربة Gson.

\n\n

المقالة موجهة للمبتدئين. سنبدأ بتحليل سلسلة بسيطة، ثم ننتقل إلى إنشاء هياكل متداخلة معقدة، وفي النهاية سنتطرق إلى التسلسل - تحويل كائناتك مرة أخرى إلى JSON.

\n\n

1. إعداد المشروع: التبعيات والاستيرادات

\n\n

قبل كتابة الكود، تحتاج إلى إضافة المكتبات. سننظر في خيارين.

\n\n

1.1. تثبيت kotlinx.serialization

\n\n

هذا هو الحل الرسمي من JetBrains. أضف إلى ملف build.gradle.kts:

\n\n
plugins {\n    kotlin("jvm") version "1.9.0"\n    kotlin("plugin.serialization") version "1.9.0"\n}\n\ndependencies {\n    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")\n}\n
\n\n

1.2. تثبيت Gson

\n\n

Gson هي مكتبة من Google. هي أبسط في الإعداد، ولكنها تتطلب المزيد من العمل اليدوي:

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

بعد مزامنة المشروع، يمكنك كتابة الكود.

\n\n

2. تحليل JSON في Kotlin باستخدام kotlinx.serialization

\n\n

هذا الأسلوب هو الأكثر "كوتلينية". تعلن عن فئات البيانات (data classes) وتضيف التعليق التوضيحي @Serializable. ستقوم المكتبة بإنشاء الكود الخاص بالتحليل تلقائيًا.

\n\n

2.1. مثال بسيط: بيانات المستخدم

\n\n

لنفترض أن لدينا سلسلة JSON:

\n\n
{\n    "name": "آنا",\n    "age": 25,\n    "email": "anna@example.com"\n}\n
\n\n

ننشئ النموذج:

\n\n
import kotlinx.serialization.Serializable\nimport kotlinx.serialization.json.Json\n\n@Serializable\ndata class User(\n    val name: String,\n    val age: Int,\n    val email: String\n)\n\nfun main() {\n    val jsonString = """\n        {\n            "name": "آنا",\n            "age": 25,\n            "email": "anna@example.com"\n        }\n    """.trimIndent()\n\n    val user = Json.decodeFromString<User>(jsonString)\n    println("الاسم: ${user.name}, العمر: ${user.age}")\n}\n
\n\n

كما ترى، لا توجد تعيينات يدوية - كل شيء تلقائي.

\n\n

2.2. العمل مع القوائم والكائنات المتداخلة

\n\n

غالبًا ما تُرجع واجهات برمجة التطبيقات (API) الحقيقية مصفوفات. دعنا نضيف حقل address:

\n\n
@Serializable\ndata class Address(\n    val city: String,\n    val street: String\n)\n\n@Serializable\ndata class UserWithAddress(\n    val name: String,\n    val age: Int,\n    val address: Address\n)\n\nfun main() {\n    val jsonArray = """\n        [\n            {"name": "إيفان", "age": 30, "address": {"city": "موسكو", "street": "تفيرسكايا"}},\n            {"name": "ماريا", "age": 22, "address": {"city": "سانت بطرسبرغ", "street": "نيفسكي"}}\n        ]\n    """.trimIndent()\n\n    val users = Json.decodeFromString<List<UserWithAddress>>(jsonArray)\n    users.forEach { println("${it.name} يعيش في ${it.address.city}") }\n}\n
\n\n

لاحظ: للعمل مع القوائم، نستخدم النوع العام List<UserWithAddress>.

\n\n

3. تحليل JSON باستخدام Gson

\n\n

Gson هي مكتبة Java كلاسيكية. تعمل بشكل ممتاز في Kotlin أيضًا، ولكنها تتطلب القليل من الكود الإضافي.

\n\n

3.1. التحليل الأساسي

\n\n
import com.google.gson.Gson\n\ndata cl                

المدونات

توصيات الكتب