JSON: ما هو، هيكل البيانات ومبدأ العمل

المؤلف: IT Sectr نُشر: 2026-03-08 وقت القراءة: 8 دق

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

الخلاصة

  • JSON — تنسيق نصي خفيف للبيانات المنظمة يعتمد على بناء جملة JavaScript
  • ستة أنواع بيانات — سلسلة، رقم، منطقي، null، مصفوفة وكائن لأي هياكل
  • العالمية — مدعوم من قبل جميع لغات البرمجة والمنصات
  • REST API — التنسيق الرئيسي لتبادل البيانات في تطبيقات الويب والجوال
  • قابلية القراءة البشرية — بناء جملة بسيط يسهل قراءته وتحريره دون أدوات

ما هو JSON؟

JSON هو تنسيق نصي لتمثيل البيانات المنظمة، يعتمد على بناء جملة JavaScript. على الرغم من أصوله في JavaScript، فإن التنسيق مستقل تماماً عن اللغة — توجد محللات ومتسلسلات لجميع لغات البرمجة الشائعة.

بدأ تاريخ JSON في أوائل العقد الأول من القرن الحادي والعشرين، عندما استخرج دوغلاس كروكفورد مجموعة فرعية من بناء جملة JavaScript لتبادل البيانات. في عام 2013، تم توحيد التنسيق كـ ECMA-404، ولاحقاً كـ ISO/IEC 21778:2017. الاسم يرمز إلى JavaScript Object Notation.

الميزة الرئيسية لـ JSON هي بناء جمله البسيط. يتم استخدام ستة أنواع فقط لوصف البيانات: سلسلة، رقم، منطقي، null، مصفوفة وكائن. هذا كافٍ لتمثيل أي هياكل بيانات مستخدمة في التطبيقات.

أين يُستخدم JSON

  • REST API — التنسيق الرئيسي للطلبات والاستجابات بين الخادم والعميل
  • ملفات التكوين — package.json، tsconfig.json، .prettierrc
  • قواعد البيانات — MongoDB، PostgreSQL (JSONB)، Firebase Firestore
  • تطبيقات الجوال — تخزين الإعدادات، التخزين المؤقت للبيانات
  • تقنيات الويب — WebSocket، Server-Sent Events، localStorage

بناء جملة JSON وأنواع البيانات

بناء جملة JSON بسيط للغاية: البيانات ممثلة كأزواج مفتاح-قيمة، حيث المفتاح هو سلسلة بين علامتي اقتباس مزدوجة، والقيمة هي أحد الأنواع الأساسية الستة. الكائنات تُحصر بين أقواس متعرجة، المصفوفات بين أقواس مربعة. السلاسل يجب أن تستخدم علامات الاقتباس المزدوجة؛ علامات الاقتباس المفردة غير مسموح بها.

الأرقام في JSON يمكن أن تكون صحيحة أو عائمة، موجبة أو سالبة، مع تدوين أسي. القيم المنطقية ممثلة بالحرفيين true و false، وغياب القيمة بـ null. المصفوفات تحتوي على مجموعة مرتبة من القيم من أي نوع، بما في ذلك المصفوفات والكائنات المتداخلة.

json
{
  "name": "JSON",
  "type": "text",
  "version": 2024,
  "flexible": true,
  "extensions": null,
  "languages": [
    "JavaScript",
    "Python",
    "Java"
  ],
  "nested": {
    "info": "دعم التداخل"
  }
}
النوع مثال الوصف
سلسلة «نص» بين علامتي اقتباس مزدوجة، مع تسلسلات هروب
رقم 42 صحيح، عائم، أسي
منطقي true true أو false — بدون علامات اقتباس
null null غياب القيمة
كائن {} مجموعة غير مرتبة من أزواج مفتاح-قيمة
مصفوفة [] قائمة مرتبة من القيم

JSON في REST API

JSON هو التنسيق الرئيسي لتبادل البيانات لواجهات برمجة تطبيقات REST في تطوير الجوال والويب. يرسل الخادم JSON في نص الاستجابة، والعميل في نص الطلب. رأس Content-Type القياسي لـ JSON هو application/json.

واجهات REST API الحديثة تستخدم JSON لنقل جميع أنواع البيانات: من قوائم بسيطة إلى هياكل متداخلة معقدة مع علاقات بين الكيانات. مكتبات العميل (مثل Axios في JavaScript أو Retrofit على Android) تسلسل وتفك تسلسل JSON تلقائياً، مما يعفي المطور من التحليل اليدوي.

ميزة مهمة لـ JSON في REST API هي إمكانية النقل الجزئي للبيانات (استجابة جزئية) عبر معاملات الاستعلام، بالإضافة إلى دعم الموارد المتداخلة دون طلبات إضافية إلى الخادم.

تحليل JSON على منصات الجوال

تحليل JSON على منصات الجوال يتم باستخدام أدوات مدمجة. Android يستخدم Gson من Google أو Moshi من Square، iOS يستخدم بروتوكول Codable مع JSONDecoder. كل منصة توفر أدوات مناسبة لتحويل JSON إلى كائنات أصلية والعكس.

JSON على Android (Kotlin)

على Android، النهج الشائع يستخدم Gson أو Moshi. ببساطة قم بتعريف class بيانات مع تعليقات @SerializedName واستدعاء fromJson لفك التسلسل. المكتبة تقوم تلقائياً بمطابقة أسماء الحقول في JSON مع خصائص class.

kotlin
import com.google.gson.Gson
import com.google.gson.annotations.SerializedName

data class User(
    @SerializedName("id") val id: Int,
    @SerializedName("name") val name: String,
    @SerializedName("email") val email: String
)

fun parseJson(jsonString: String): User {
    val gson = Gson()
    return gson.fromJson(jsonString, User::class.java)
}

JSON على iOS (Swift)

على iOS، يُستخدم البروتوكول المدمج Codable مع JSONDecoder. هيكل البيانات يُعلن كـ struct مع توافق Codable، وبعد ذلك يتم تحليل JSON بسطر واحد. JSONEncoder يقوم بالتسلسل العكسي — تحويل كائن إلى JSON لإرساله إلى الخادم.

swift
import Foundation

struct User: Codable {
    let id: Int
    let name: String
    let email: String
}

func parseJSON(from data: Data) throws -> User {
    let decoder = JSONDecoder()
    return try decoder.decode(User.self, from: data)
}

JSON مقابل XML: مقارنة التنسيقات

JSON و XML هما التنسيقان الرئيسيان لنقل البيانات المنظمة. JSON يتفوق في البساطة والأداء، XML في الدقة والتحقق. الاختيار بينهما يعتمد على متطلبات المشروع: REST API غالباً ما تستخدم JSON، المستندات المعقدة مع المخططات تستخدم XML.

XML يتطلب علامات إغلاق لكل عنصر، مما يزيد حجم البيانات بمقدار 2-3 مرات مقارنة بـ JSON. في نفس الوقت، XML يدعم مساحات الأسماء، مخططات XSD، السمات وتحويل XSLT، مما يجعله أكثر قوة لإدارة المستندات وتكامل أنظمة المؤسسات.

الخاصية JSON XML
بناء الجملة بسيط، مفتاح-قيمة قائم على العلامات، علامات فتح وإغلاق
حجم البيانات مضغوط 2-3 مرات أكبر من JSON
أنواع البيانات ستة أنواع أساسية نص فقط، أنواع عبر المخططات
التحقق لا يوجد مدمج، عبر JSON Schema XSD — صارم وناضج
مساحات الأسماء لا يوجد دعم كامل لـ namespace
سرعة التحليل عالية أقل بسبب التعقيد

أمثلة العمل مع JSON

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

تسلسل كائن إلى JSON

في JavaScript، JSON.stringify يحول كائن إلى سلسلة JSON. الوسيطة الثانية يمكن أن تكون مصفوفة من المفاتيح للتسلسل الانتقائي أو دالة بديلة. الوسيطة الثالثة تحدد المسافة البادئة للتنسيق.

typescript
interface Order {
  id: string;
  items: OrderItem[];
  total: number;
  createdAt: string;
}

const order: Order = {
  id: 'ord_001',
  items: [{ product: 'phone', quantity: 2 }],
  total: 1599.98,
  createdAt: '2026-07-03T10:00:00Z'
};

const jsonString = JSON.stringify(order, null, 2);

تحليل JSON متداخل

في Kotlin مع مكتبة Moshi، يتم التعامل مع كائنات JSON المتداخلة من خلال classات بيانات متداخلة. التعليق @Json يحدد اسم الحقل في JSON إذا كان يختلف عن اسم خاصية class. المصفوفات ممثلة كـ List مع نوع العنصر.

kotlin
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory

data class ApiResponse(
    val status: String,
    val data: List<Product>,
    val pagination: Pagination
)

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

data class Pagination(
    val page: Int,
    val total: Int
)

val moshi = Moshi.Builder()
    .add(KotlinJsonAdapterFactory())
    .build()

JSON Schema: التحقق من الهيكل

JSON Schema هي لغة لوصف هيكل مستند JSON، مشابهة لـ XSD لـ XML. باستخدام JSON Schema، يمكنك تحديد الحقول الإلزامية، أنواع البيانات، نطاقات القيم، أنماط السلاسل والهيكل المتداخل. التحقق بالمخطط يكتشف أخطاء البيانات قبل معالجتها في التطبيق.

JSON Schema تُستخدم على نطاق واسع في OpenAPI (Swagger) لتوثيق REST API، في نماذج التحقق من إدخال البيانات وفي الاختبارات. ملف المخطط نفسه هو مستند JSON، مما يسمح لمحللات JSON القياسية بقراءته. توجد مدققات عبر الإنترنت ومكتبات لجميع لغات البرمجة الشائعة.

في تطوير الجوال، JSON Schema تُستخدم للتحقق من استجابات الخادم أثناء الاختبار ولتدقيق ملفات التكوين. مكتبات مثل network-validator على Android و json-schema-validator تسمح بدمج التحقق مباشرة في عملية التطوير، مما يمنع الأخطاء في المراحل المبكرة.

الأسئلة الشائعة

ما أنواع البيانات التي يدعمها JSON؟

JSON يدعم ستة أنواع: سلسلة (بين علامتي اقتباس مزدوجة)، رقم (صحيح وعائم)، منطقي (true/false)، null، كائن (أزواج مفتاح-قيمة في {}) ومصفوفة (قائمة قيم في []). هذا كافٍ لأي هياكل بيانات في التطبيقات.

هل يمكن استخدام التعليقات في JSON؟

لا، معيار JSON لا يدعم التعليقات. إذا كنت بحاجة إلى تعليقات، استخدم JSON5 (JSON الموسع) أو أضف حقل وصف، مثلاً «_comment»: «شرح». بعض الأدوات، مثل VS Code، تدعم التعليقات في ملفات JSON للتكوين، لكن هذا امتداد غير قياسي.

كيف يختلف JSON عن JSONB في PostgreSQL؟

JSONB هو تنسيق تخزين ثنائي لـ JSON في PostgreSQL. على عكس JSON النصي، JSONB أسرع في المعالجة، يدعم الفهرسة (فهارس GIN) ويضمن تفرد المفاتيح. ومع ذلك، JSONB يشغل مساحة أكبر على القرص بسبب البيانات الوصفية المضافة.

كيف تتحقق من صحة JSON؟

استخدم JSONLint (jsonlint.com) للتحقق السريع، أو JSON.parse() المدمج في JavaScript مع try-catch، أو إضافات IDE. التحقق يشمل التأكد من صحة علامات الاقتباس، إغلاق الأقواس ومطابقة الأنواع. للمخططات المعقدة، استخدم JSON Schema Validator.

ما هو الحد الأقصى لحجم ملف JSON؟

لا يوجد حد في مواصفات JSON. عملياً، الحجم محدود بذاكرة الجهاز وقدرات المحلل. لتطبيقات الجوال، يُوصى بعدم تجاوز 1-2 ميغابايت لكل استجابة، وللبيانات الكبيرة استخدام التقسيم أو النقل التدفقي.

الملخص

  • JSON — تنسيق نصي بسيط بستة أنواع بيانات لتبادل المعلومات المنظمة
  • الاستقلال عن اللغة — محللات JSON موجودة لجميع لغات البرمجة الشائعة
  • REST API تستخدم JSON كتنسيق قياسي للطلبات والاستجابات في تطبيقات الجوال
  • التحليل يتم باستخدام أدوات مدمجة: Gson/Moshi على Android، Codable على iOS
  • JSON مضغوط أكثر من XML بمقدار 2-3 مرات، لكنه أقل من Protobuf في الأداء
  • قابلية القراءة البشرية — بناء الجملة سهل القراءة والتصحيح دون أدوات خاصة
  • JSON Schema — أداة إضافية للتحقق من الهيكل وأنواع البيانات

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا