JSON (JavaScript Object Notation) هو تنسيق نصي لتبادل البيانات يعتمد على بناء جملة كائنات JavaScript. يُستخدم في كل مكان: من واجهات برمجة تطبيقات REST وملفات التكوين إلى تخزين البيانات في قواعد البيانات وتطبيقات الجوال. وفقاً للموقع الرسمي لـ JSON، التنسيق مستقل عن لغة البرمجة ومدعوم من قبل جميع المنصات الحديثة تقريباً. JSON أصبح المعيار الفعلي لنقل البيانات بين العميل والخادم.
الخلاصة
JSON هو تنسيق نصي لتمثيل البيانات المنظمة، يعتمد على بناء جملة JavaScript. على الرغم من أصوله في JavaScript، فإن التنسيق مستقل تماماً عن اللغة — توجد محللات ومتسلسلات لجميع لغات البرمجة الشائعة.
بدأ تاريخ JSON في أوائل العقد الأول من القرن الحادي والعشرين، عندما استخرج دوغلاس كروكفورد مجموعة فرعية من بناء جملة JavaScript لتبادل البيانات. في عام 2013، تم توحيد التنسيق كـ ECMA-404، ولاحقاً كـ ISO/IEC 21778:2017. الاسم يرمز إلى JavaScript Object Notation.
الميزة الرئيسية لـ JSON هي بناء جمله البسيط. يتم استخدام ستة أنواع فقط لوصف البيانات: سلسلة، رقم، منطقي، null، مصفوفة وكائن. هذا كافٍ لتمثيل أي هياكل بيانات مستخدمة في التطبيقات.
بناء جملة JSON بسيط للغاية: البيانات ممثلة كأزواج مفتاح-قيمة، حيث المفتاح هو سلسلة بين علامتي اقتباس مزدوجة، والقيمة هي أحد الأنواع الأساسية الستة. الكائنات تُحصر بين أقواس متعرجة، المصفوفات بين أقواس مربعة. السلاسل يجب أن تستخدم علامات الاقتباس المزدوجة؛ علامات الاقتباس المفردة غير مسموح بها.
الأرقام في JSON يمكن أن تكون صحيحة أو عائمة، موجبة أو سالبة، مع تدوين أسي. القيم المنطقية ممثلة بالحرفيين true و false، وغياب القيمة بـ null. المصفوفات تحتوي على مجموعة مرتبة من القيم من أي نوع، بما في ذلك المصفوفات والكائنات المتداخلة.
{
"name": "JSON",
"type": "text",
"version": 2024,
"flexible": true,
"extensions": null,
"languages": [
"JavaScript",
"Python",
"Java"
],
"nested": {
"info": "دعم التداخل"
}
}
| النوع | مثال | الوصف |
|---|---|---|
| سلسلة | «نص» |
بين علامتي اقتباس مزدوجة، مع تسلسلات هروب |
| رقم | 42 |
صحيح، عائم، أسي |
| منطقي | true |
true أو false — بدون علامات اقتباس |
| null | null |
غياب القيمة |
| كائن | {} |
مجموعة غير مرتبة من أزواج مفتاح-قيمة |
| مصفوفة | [] |
قائمة مرتبة من القيم |
JSON هو التنسيق الرئيسي لتبادل البيانات لواجهات برمجة تطبيقات REST في تطوير الجوال والويب. يرسل الخادم JSON في نص الاستجابة، والعميل في نص الطلب. رأس Content-Type القياسي لـ JSON هو application/json.
واجهات REST API الحديثة تستخدم JSON لنقل جميع أنواع البيانات: من قوائم بسيطة إلى هياكل متداخلة معقدة مع علاقات بين الكيانات. مكتبات العميل (مثل Axios في JavaScript أو Retrofit على Android) تسلسل وتفك تسلسل JSON تلقائياً، مما يعفي المطور من التحليل اليدوي.
ميزة مهمة لـ JSON في REST API هي إمكانية النقل الجزئي للبيانات (استجابة جزئية) عبر معاملات الاستعلام، بالإضافة إلى دعم الموارد المتداخلة دون طلبات إضافية إلى الخادم.
تحليل JSON على منصات الجوال يتم باستخدام أدوات مدمجة. Android يستخدم Gson من Google أو Moshi من Square، iOS يستخدم بروتوكول Codable مع JSONDecoder. كل منصة توفر أدوات مناسبة لتحويل JSON إلى كائنات أصلية والعكس.
على Android، النهج الشائع يستخدم Gson أو Moshi. ببساطة قم بتعريف class بيانات مع تعليقات @SerializedName واستدعاء fromJson لفك التسلسل. المكتبة تقوم تلقائياً بمطابقة أسماء الحقول في JSON مع خصائص class.
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)
}
على iOS، يُستخدم البروتوكول المدمج Codable مع JSONDecoder. هيكل البيانات يُعلن كـ struct مع توافق Codable، وبعد ذلك يتم تحليل JSON بسطر واحد. JSONEncoder يقوم بالتسلسل العكسي — تحويل كائن إلى JSON لإرساله إلى الخادم.
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 في الدقة والتحقق. الاختيار بينهما يعتمد على متطلبات المشروع: REST API غالباً ما تستخدم JSON، المستندات المعقدة مع المخططات تستخدم XML.
XML يتطلب علامات إغلاق لكل عنصر، مما يزيد حجم البيانات بمقدار 2-3 مرات مقارنة بـ JSON. في نفس الوقت، XML يدعم مساحات الأسماء، مخططات XSD، السمات وتحويل XSLT، مما يجعله أكثر قوة لإدارة المستندات وتكامل أنظمة المؤسسات.
| الخاصية | JSON | XML |
|---|---|---|
| بناء الجملة | بسيط، مفتاح-قيمة | قائم على العلامات، علامات فتح وإغلاق |
| حجم البيانات | مضغوط | 2-3 مرات أكبر من JSON |
| أنواع البيانات | ستة أنواع أساسية | نص فقط، أنواع عبر المخططات |
| التحقق | لا يوجد مدمج، عبر JSON Schema | XSD — صارم وناضج |
| مساحات الأسماء | لا يوجد | دعم كامل لـ namespace |
| سرعة التحليل | عالية | أقل بسبب التعقيد |
الأمثلة توضح العمليات النموذجية مع JSON في تطوير الجوال: تحليل استجابات API، إنشاء JSON للإرسال ومعالجة الهياكل المتداخلة. فهم هذه الأنماط ضروري لأي مطور تطبيقات جوال.
في JavaScript، JSON.stringify يحول كائن إلى سلسلة JSON. الوسيطة الثانية يمكن أن تكون مصفوفة من المفاتيح للتسلسل الانتقائي أو دالة بديلة. الوسيطة الثالثة تحدد المسافة البادئة للتنسيق.
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);
في Kotlin مع مكتبة Moshi، يتم التعامل مع كائنات JSON المتداخلة من خلال classات بيانات متداخلة. التعليق @Json يحدد اسم الحقل في JSON إذا كان يختلف عن اسم خاصية class. المصفوفات ممثلة كـ List مع نوع العنصر.
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، مشابهة لـ XSD لـ XML. باستخدام JSON Schema، يمكنك تحديد الحقول الإلزامية، أنواع البيانات، نطاقات القيم، أنماط السلاسل والهيكل المتداخل. التحقق بالمخطط يكتشف أخطاء البيانات قبل معالجتها في التطبيق.
JSON Schema تُستخدم على نطاق واسع في OpenAPI (Swagger) لتوثيق REST API، في نماذج التحقق من إدخال البيانات وفي الاختبارات. ملف المخطط نفسه هو مستند JSON، مما يسمح لمحللات JSON القياسية بقراءته. توجد مدققات عبر الإنترنت ومكتبات لجميع لغات البرمجة الشائعة.
في تطوير الجوال، JSON Schema تُستخدم للتحقق من استجابات الخادم أثناء الاختبار ولتدقيق ملفات التكوين. مكتبات مثل network-validator على Android و json-schema-validator تسمح بدمج التحقق مباشرة في عملية التطوير، مما يمنع الأخطاء في المراحل المبكرة.
الأسئلة الشائعة
JSON يدعم ستة أنواع: سلسلة (بين علامتي اقتباس مزدوجة)، رقم (صحيح وعائم)، منطقي (true/false)، null، كائن (أزواج مفتاح-قيمة في {}) ومصفوفة (قائمة قيم في []). هذا كافٍ لأي هياكل بيانات في التطبيقات.
لا، معيار JSON لا يدعم التعليقات. إذا كنت بحاجة إلى تعليقات، استخدم JSON5 (JSON الموسع) أو أضف حقل وصف، مثلاً «_comment»: «شرح». بعض الأدوات، مثل VS Code، تدعم التعليقات في ملفات JSON للتكوين، لكن هذا امتداد غير قياسي.
JSONB هو تنسيق تخزين ثنائي لـ JSON في PostgreSQL. على عكس JSON النصي، JSONB أسرع في المعالجة، يدعم الفهرسة (فهارس GIN) ويضمن تفرد المفاتيح. ومع ذلك، JSONB يشغل مساحة أكبر على القرص بسبب البيانات الوصفية المضافة.
استخدم JSONLint (jsonlint.com) للتحقق السريع، أو JSON.parse() المدمج في JavaScript مع try-catch، أو إضافات IDE. التحقق يشمل التأكد من صحة علامات الاقتباس، إغلاق الأقواس ومطابقة الأنواع. للمخططات المعقدة، استخدم JSON Schema Validator.
لا يوجد حد في مواصفات JSON. عملياً، الحجم محدود بذاكرة الجهاز وقدرات المحلل. لتطبيقات الجوال، يُوصى بعدم تجاوز 1-2 ميغابايت لكل استجابة، وللبيانات الكبيرة استخدام التقسيم أو النقل التدفقي.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا