ما هو JSON؟ دليل كامل للمبتدئين
كل ما تحتاج معرفته عن JSON — صيغة البيانات التي تشغّل الويب الحديث — من الصياغة إلى الاستخدام في الواجهات البرمجية.
JSON في 30 ثانية
JSON (تنسيق كائن جافا سكريبت) هو تنسيق بيانات خفيف الوزن يعتمد على النص، وقد أصبح اللغة المشتركة لتبادل البيانات على الويب. إذا كنت قد اتصلت يومًا بواجهة برمجة تطبيقات REST، أو فتحت ملف package.json، أو عملت مع MongoDB، فقد استخدمت JSON بالفعل — ربما دون التفكير في الأمر كثيرًا.
في جوهره، JSON هو مجرد وسيلة لتمثيل البيانات المنظمة كنص عادي. إنه قابل للقراءة البشرية (إلى حد كبير)، وقابل للتحليل الآلي (بسهولة كبيرة)، ومدعوم من قبل virtually كل لغة برمجة موجودة. هذا المزيج هو بالضبط السبب في فوزه.
تاريخ موجز
تمت شعبية JSON بواسطة دوغلاس كروكفورد في أوائل العقد الأول من القرن الحادي والعشرين. لم "يخترعه" حقًا — التركيب النحوي هو مجموعة فرعية من جافا سكريبت التي كانت موجودة منذ عام 1999 — لكنه أعطاه اسمًا، وموقعًا إلكترونيًا (json.org)، ومواصفة. أحيانًا ما تكون العلامة التجارية أكثر أهمية من الاختراع.
تم تحديد التنسيق رسميًا في RFC 4627 (2006) وتم استبداله لاحقًا بـ RFC 8259 (2017) ومعيار ECMA-404. لكن بصراحة، لم تتغير المواصفة كثيرًا منذ البداية. بساطة JSON هي أعظم قوته — فلا يوجد الكثير لتغييره.
قبل أن يتولى JSON، كانت XML هي تنسيق تبادل البيانات السائد. إذا كنت تريد أن ترى لماذا تجمع المطورون حول JSON، تحقق من مقارنة JSON و XML.
6 أنواع بيانات JSON
يدعم JSON بالضبط ستة أنواع من البيانات. لا أكثر، ولا أقل. هذا القيد مقصود — فهو يبقي الأمور بسيطة وقابلة للتشغيل المتبادل عبر اللغات.
| النوع | الوصف | المثال |
|---|---|---|
| سلسلة نصية | نص محاط بعلامات اقتباس مزدوجة | "hello world" |
| رقم | عدد صحيح أو عدد عشري (لا هكس، لا NaN، لا لانهائي) | 42, 3.14, -7 |
| منطقي | القيمة الحرفية true أو false | true |
| فارغ | يمثل قيمة فارغة أو غير معروفة | null |
| كائن | مجموعة غير مرتبة من أزواج المفتاح والقيمة | {"name": "Ada"} |
| مصفوفة | قائمة مرتبة من القيم | [1, 2, 3] |
لاحظ ما هو غير موجود في القائمة: التواريخ، الدوال، غير معرف، التعليقات، أو البيانات الثنائية. لا يدعم JSON أيًا من تلك بشكل أصلي. عادةً ما يتم تمرير التواريخ كسلاسل ISO 8601 ("2025-01-15T10:30:00Z")، ويتم ترميز البيانات الثنائية باستخدام Base64. إنه أمر مزعج بعض الشيء، لكنه يحافظ على تنسيق عالمي.
قواعد بناء جملة JSON
بناء جملة JSON صارم. إذا كنت قادمًا من جافا سكريبت، قد تتعثر في بعض هذه القواعد. إليك إياها، بدون تزيين:
- يجب أن تكون المفاتيح سلاسل نصية محاطة بعلامات اقتباس مزدوجة. علامات الاقتباس المفردة لا تعمل. المفاتيح غير المحاطة بعلامات اقتباس لا تعمل. هذا ليس جافا سكريبت.
- يجب أن تستخدم السلاسل علامات الاقتباس المزدوجة.
'hello'هو JSON غير صالح."hello"هو صالح. - لا توجد فاصلة زائدة. تلك الفاصلة الأخيرة بعد الخاصية النهائية؟ يقول JSON لا.
- لا توجد تعليقات. هذه ربما تكون أكثر قرارات تصميم JSON جدلًا. أزالها دوغلاس كروكفورد عمدًا لمنع الإساءة.
- لا يوجد جذر ذو قيمة واحدة (في المواصفات القديمة). RFC 8259 يسمح الآن بأي قيمة JSON كجذر، لكن العديد من المحللات لا تزال تتوقع كائنًا أو مصفوفة.
إليك مستند JSON صالح:
{
"name": "Grace Hopper",
"age": 85,
"languages": ["COBOL", "FORTRAN"],
"retired": true,
"spouse": null,
"address": {
"city": "Arlington",
"state": "VA"
}
}
وهنا ما يكسره:
{
name: "Grace Hopper", // ❌ مفتاح غير محاط بعلامات اقتباس
'age': 85, // ❌ مفتاح محاط بعلامات اقتباس مفردة
"languages": ["COBOL",], // ❌ فاصلة زائدة
// هذه تعليق // ❌ التعليقات غير مسموح بها
}
هل لديك JSON غير صالح؟ ألصقه في منسق JSON لدينا لرؤية أخطاء بناء الجملة على الفور وإصلاح المشكلات الشائعة مثل الفواصل الزائدة تلقائيًا.
JSON مقابل كائنات جافا سكريبت
هذا يربك تقريبًا كل مطور جافا سكريبت في مرحلة ما. يبدو JSON مثل كائن جافا سكريبت، لكنه ليس نفس الشيء. إليك المكان الذي يختلفان فيه:
| الميزة | JSON | كائن جافا سكريبت |
|---|---|---|
| المفاتيح | يجب أن تكون سلاسل نصية محاطة بعلامات اقتباس مزدوجة | يمكن أن تكون معرفات غير محاطة بعلامات اقتباس، رموز، أو محسوبة |
| السلاسل | علامات الاقتباس المزدوجة فقط | علامات الاقتباس المفردة، علامات الاقتباس المزدوجة، أو العلامات الخلفية |
| الفواصل الزائدة | غير مسموح بها | مسموح بها |
| التعليقات | غير مسموح بها | مسموح بها |
| القيم | سلاسل، أرقام، منطقيات، فارغ، كائنات، مصفوفات | كل ما سبق بالإضافة إلى الدوال، غير معرف، تاريخ، تعبيرات منتظمة، إلخ. |
| الطرق | غير مدعومة | مدعومة |
| الاستخدام | تنسيق تبادل البيانات (نص) | هيكل بيانات في الذاكرة |
في الممارسة العملية، تقوم بالتحويل بينهما باستخدام JSON.parse() و JSON.stringify():
// سلسلة → كائن
const data = JSON.parse('{"name": "Ada", "year": 1843}');
console.log(data.name); // "Ada"
// كائن → سلسلة
const json = JSON.stringify({ name: "Ada", year: 1843 });
console.log(json); // '{"name":"Ada","year":1843}'
// طباعة جميلة مع تباعد بمقدار 2
const pretty = JSON.stringify(data, null, 2);
حالات الاستخدام الشائعة
1. واجهات برمجة التطبيقات REST
هذا هو جوهر JSON. الغالبية العظمى من واجهات برمجة التطبيقات الحديثة على الويب ترسل وتستقبل JSON. عندما تقوم بـ fetch() البيانات من خادم، فمن المؤكد تقريبًا أنك تحصل على JSON في المقابل:
const response = await fetch("https://api.example.com/users/1");
const user = await response.json();
// { "id": 1, "name": "Alice", "email": "alice@example.com" }
2. ملفات التكوين
package.json، tsconfig.json، .eslintrc.json، composer.json — القائمة تطول. JSON موجود في كل مكان في أدوات المطورين. عدم وجود تعليقات مؤلم حقًا هنا، ولهذا السبب تدعم بعض الأدوات JSON5 أو JSONC (JSON مع تعليقات) كبدائل.
3. قواعد البيانات NoSQL
تخزن MongoDB الوثائق كـ BSON (JSON ثنائي). تستخدم CouchDB JSON عادي. تستخدم DynamoDB وFirestore والعديد من الآخرين هياكل شبيهة بـ JSON. إذا كنت تعمل مع قاعدة بيانات وثائق، فأنت تعمل مع JSON.
4. التخزين المحلي وإدارة الحالة
يخزن localStorage في المتصفح سلاسل فقط، لذا فإن تسلسل الحالة إلى JSON هو النهج القياسي:
// حفظ
localStorage.setItem("prefs", JSON.stringify({ theme: "dark", lang: "en" }));
// تحميل
const prefs = JSON.parse(localStorage.getItem("prefs") ?? "{}");
5. تبادل البيانات بين الخدمات الصغيرة
تميل قوائم الرسائل (RabbitMQ، Kafka)، والويب هوكس، والتواصل بين الخدمات إلى الاعتماد بشكل كبير على JSON. ليس دائمًا الخيار الأكثر كفاءة في السيناريوهات ذات الإنتاجية العالية (Protobuf وMessagePack أسرع)، لكنه الأكثر قابلية للتصحيح.
أفضل الممارسات لـ JSON
بعد سنوات من العمل مع JSON يوميًا، إليك العادات التي أوصي ببنائها:
- استخدم تسميات متسقة. اختر
camelCaseأوsnake_caseللمفاتيح والتزم بها عبر واجهة برمجة التطبيقات الخاصة بك. خلطها هو طريق سريع للأخطاء. - تحقق مبكرًا. لا تثق في JSON الوارد بشكل أعمى. استخدم تحقق من مخطط JSON للقبض على البيانات غير الصحيحة قبل أن تصل إلى منطق العمل الخاص بك.
- احتفظ بالتعشيش ضحلًا. إذا كان JSON الخاص بك أكثر من 3-4 مستويات عميقة، فكر في تسطيحه. الهياكل المتداخلة بعمق صعبة الاستعلام، وصعبة القراءة، وصعبة المقارنة.
- استخدم المصفوفات للقوائم، والكائنات للسجلات. يبدو ذلك واضحًا، لكنني رأيت أشخاصًا يستخدمون كائنات بمفاتيح نصية رقمية (
{"0": "a", "1": "b"}) بدلاً من المصفوفات. لا تفعل ذلك. - فضل
nullعلى المفاتيح المفقودة عندما لا تحتوي حقل على قيمة. يجعل المخطط واضحًا ويتجنب الغموض حول ما إذا كان الحقل قد تم حذفه عمدًا. - قم بالتنسيق للبشر أثناء التطوير. JSON المضغوط يوفر بايتات ولكنه يقتل قابلية القراءة. استخدم الطباعة الجميلة عند تصحيح الأخطاء، واضغط عند الشحن. يتعامل مضغوط JSON لدينا مع الأخير.
جرب بنفسك: ألصق أي JSON في منسق JSON لدينا للتحقق من صحة، وتنسيق، واستكشاف هيكله مع تمييز بناء الجملة وعرض الشجرة.
ماذا عن JSON5 و JSONC؟
إذا كانت صرامة JSON تزعجك، فأنت لست وحدك. هناك ملحقان شائعان يخففان القواعد:
- JSON5 يسمح بالسلاسل النصية المحاطة بعلامات اقتباس مفردة، والفواصل الزائدة، والتعليقات، والمفاتيح غير المحاطة بعلامات اقتباس، وأكثر. إنه رائع لملفات التكوين حيث يكون البشر هم الجمهور الأساسي.
- JSONC (JSON مع تعليقات) هو ملحق بسيط يستخدمه VS Code وملفات تكوين TypeScript. يضيف فقط دعم التعليقات — لا شيء آخر.
لكن لا شيء من هذين هو JSON صالح. إذا كنت تبني واجهة برمجة تطبيقات أو تتبادل البيانات بين الأنظمة، التزم بـ JSON القياسي. استخدم الملحقات فقط حيث تدعمها الأدوات بشكل صريح.
الخاتمة
نجح JSON ليس لأنه مثالي، ولكن لأنه جيد بما يكفي تقريبًا لكل شيء وسهل العمل معه. نظامه المحدود من الأنواع محبط في بعض الأحيان (أين توارخي؟)، وقاعدة عدم وجود تعليقات هي نقطة ألم حقيقية. لكن تلك القيود هي أيضًا ما يجعلها قابلة للتشغيل المتبادل عالميًا.
إذا كنت قد بدأت للتو، فإن أفضل طريقة لتعلم JSON هي العمل معه بشكل عملي. جرب لصق بعض البيانات في أدواتنا، وكسر الأشياء عمدًا، ورؤية ما يحدث. فهم رسائل الخطأ هو نصف المعركة.
استمر في الاستكشاف:
- JSON مقابل YAML — متى تستخدم كل تنسيق
- JSON مقابل XML — لماذا استبدل JSON XML في معظم حالات الاستخدام
- مدقق JSON — تحقق مما إذا كان JSON الخاص بك صالحًا
- مولد مخطط JSON — توليد المخططات تلقائيًا من بيانات JSON