Kotlin JSON: دليل تحليل JSON من الصفر إلى الاحتراف

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

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

ابدأ الدورة

مقدمة: لماذا JSON في Kotlin هو ألم وفرح في آن واحد

\n

إذا كنت قد كتبت أي وقت مضى تطبيقات Android أو خوادم خلفية بلغة Kotlin، فبالتأكيد واجهت JSON. إنه مثل الهواء لمطور العصر الحديث: API، ملفات التكوين، قواعد البيانات - كل شيء يتحدث بهذه اللغة. لكن المفارقة هي: سؤال "How to parse JSON in Kotlin?" على Stack Overflow يحصل على آلاف المشاهدات كل شهر. لماذا؟ لأنه في Kotlin، على عكس Java، يوجد null safety، والمكتبات القديمة مثل Gson تبدأ في "التصرف بغرابة".

\n

في هذا البرنامج التعليمي، سنشرح تحليل JSON في Kotlin من البسيط إلى المعقد. ستتعلم كيفية العمل مع Kotlinx Serialization وMoshi وGson الكلاسيكي. سنكتب كودًا حقيقيًا يمكنك نسخه مباشرة إلى مشروعك. هيا بنا!

\n\n
\n\n

ما هو JSON ولماذا لا يتوافق Kotlin معه بسهولة؟

\n

JSON (JavaScript Object Notation) هو تنسيق نصي لتبادل البيانات. يبدو تقريبًا هكذا:

\n
{\n  "name": "Kotlin",\n  "year": 2011,\n  "features": ["null safety", "coroutines"]\n}
\n

قد يبدو الأمر بسيطًا، لكن في Kotlin هناك كتابة صارمة وnull safety. عندما تقوم بتحليل JSON، يجب عليك تحديد الحقول التي يمكن أن تكون null بوضوح، وأيها إلزامية. إذا لم تراعِ المكتبة ذلك، فستحصل على NullPointerException أو أخطاء غريبة.

\n

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

\n\n

أفضل 3 مكتبات لتحليل JSON في Kotlin

\n

سننظر في ثلاثة طرق رئيسية. لكل منها إيجابيات وسلبيات.

\n
    \n
  • Kotlinx Serialization - المكتبة الرسمية من JetBrains. أفضل تكامل مع اللغة.
  • \n
  • Moshi - مكتبة حديثة من Square. تعمل مع Java وKotlin.
  • \n
  • Gson - المعيار القديم الجيد. لا يزال شائعًا، لكنه يتطلب الحذر مع Kotlin.
  • \n
\n\n

1. Kotlinx Serialization - اختيار المحترفين

\n

هذه مكتبة أصلية لـ Kotlin. تستخدم توليد الكود وتدعم بشكل كامل null safety. إذا كنت تكتب مشروعًا جديدًا بلغة Kotlin، فهذا هو اختيارك.

\n

التثبيت: أضف البرنامج المساعد في build.gradle.kts:

\n
plugins {\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
import kotlinx.serialization.Serializable\nimport kotlinx.serialization.json.Json\n\n@Serializable\ndata class User(\n    val name: String,\n    val year: Int,\n    val features: List<String>\n)\n\nfun main() {\n    val jsonString = """\n        {\n            "name": "Kotlin",\n            "year": 2011,\n            "features": ["null safety", "coroutines"]\n        }\n    """.trimIndent()\n\n    val user = Json.decodeFromString<User>(jsonString)\n    println(user.name) // Kotlin\n    println(user.features[0]) // null safety\n}
\n

لاحظ: Kotlinx Serialization تلتقط الأنواع تلقائيًا. إذا كان الحقل مفقودًا في JSON، ولم يتم وضع علامة عليه كـ nullable في data class، فستحصل على استثناء. هذا جيد - لن تفوتك أي خطأ.

\n\n

2. Moshi - مرن وسريع

\n

Moshi هي مكتبة من Square تم إنشاؤها مع مراعاة Kotlin. كما أنها تدعم توليد الكود وnull safety. على عكس Gson، لا تستخدم Moshi الانعكاس (reflection) افتراضيًا، مما يجعلها أسرع.

\n

التثبيت:

\n
dependencies {\n    implementation("com.squareup.moshi:moshi-kotlin:1.15.0")\n    ksp("com.squareup.moshi:moshi-kotlin-codegen:1.15.0")\n}
\n

مثال على الكود:

\n
im                

المدونات

توصيات الكتب