إذا سبق لك إنشاء موقع ويب أو استدعاء واجهة برمجة تطبيقات (API) أو إلقاء نظرة على ملف package.json، فأنت تعرف JSON بالفعل. يرمز إلى JavaScript Object Notation، وهو في الأساس اللغة العالمية التي تستخدمها التطبيقات للتواصل مع بعضها البعض. لا تدع كلمة "JavaScript" تخدعك — JSON يعمل مع جميع لغات البرمجة تقريبًا.
دعنا نشرح الأمر بلغة بسيطة، مع الكثير من الأمثلة على طول الطريق.
درس تاريخي سريع
أنشأ Douglas Crockford صيغة JSON في أوائل الألفية الثالثة. أراد شيئًا أبسط من XML لإرسال البيانات ذهابًا وإيابًا بين المتصفحات والخوادم. انتشرت الفكرة بسرعة — تم توحيد JSON رسميًا كمعيار ECMA-404 في عام 2013 ولاحقًا كـ RFC 8259 في عام 2017.
اليوم، أكثر من 90% من واجهات API على الويب تستخدم JSON. لن يختفي في أي وقت قريب.
كيف يبدو JSON؟
إليك مثالًا بسيطًا — كائن JSON يمثل شخصًا:
سهل القراءة، أليس كذلك؟ هذا هو الهدف بالضبط. دعنا نلقي نظرة على القواعد التي تجعل هذا يعمل.
قواعد الصياغة (بسيطة، أعدك)
أنواع البيانات: يمنحك JSON ستة عناصر أساسية للعمل بها: النصوص (دائمًا بين علامتي اقتباس مزدوجتين)، الأرقام، القيم المنطقية (true/false)، null، الكائنات والمصفوفات. هذا كل شيء — لا تواريخ، لا دوال، لا أنواع خاصة.
الكائنات: هي أزواج مفتاح-قيمة، محاطة بالأقواس المعقوفة {}. المفاتيح يجب أن تكون نصوصًا بين علامتي اقتباس مزدوجتين. إليك مثالًا على كائن متداخل:
المصفوفات: قوائم مرتبة محاطة بالأقواس المربعة []. يمكنها احتواء أي مزيج من الأنواع:
تنبيه مهم: لا يسمح JSON بالفواصل الزائدة في النهاية. لذا {"name": "Sam",} سيؤدي إلى تعطل المحلل الخاص بك. هذا يُربك الكثير من المبرمجين القادمين من JavaScript، حيث الفواصل في النهاية مقبولة تمامًا.
لماذا يحب المطورون JSON
هناك عدة أسباب جعلت JSON يفوز في حرب تنسيقات البيانات:
- بسيط للغاية. قارن
{"name": "Jo"}معJoفي XML. كتابة أقل، ضوضاء أقل. - كل لغة تدعمه. Python لديها
json.loads()، JavaScript لديهاJSON.parse()، Go لديهاencoding/json— فهمت الفكرة. راجع وثائق JSON على MDN للجانب الخاص بـ JavaScript. - خفيف الوزن. حمولات JSON عادةً أصغر بنسبة 30-50% من XML المكافئ. هذا مهم عندما ترسل ملايين استجابات API يوميًا.
- يتوافق بشكل طبيعي مع الكود. كائن JSON يبدو شبه متطابق مع قاموس Python أو كائن JavaScript أو hash في Ruby. لا حاجة لطبقة ترجمة.
أين ستجد JSON في الواقع
- واجهات API: استدعِ أي REST API تقريبًا وستحصل على JSON. جربها بنفسك — افتح متصفحك وزُر
https://api.github.com/users/octocat. هذا JSON. - ملفات التكوين:
package.jsonلـ Node.js،tsconfig.jsonلـ TypeScript،settings.jsonلـ VS Code — JSON موجود في كل مكان في أدوات المطورين. - قواعد البيانات: MongoDB تخزن البيانات بصيغة BSON (JSON ثنائي). PostgreSQL يدعم أعمدة JSON أصلية. حتى MySQL أضاف دعم JSON.
- تبادل البيانات: الخدمات المصغرة (Microservices) تتواصل مع بعضها دائمًا تقريبًا عبر JSON من خلال HTTP.
JSON مقابل XML — النسخة المختصرة
لا يزال لـ XML مكانه (المزيد عن ذلك في مقالنا عن XML)، لكن في معظم أعمال تطوير الويب، JSON يتفوق في سهولة القراءة وحجم الملف وسرعة التحليل. المجال الوحيد الذي يتألق فيه XML؟ البيانات المتمحورة حول المستندات مع المحتوى المختلط والمخططات والتحويلات.
التحقق من صحة JSON الخاص بك
حتى خطأ صغير — فاصلة مفقودة أو علامة اقتباس زائدة أو فاصلة في النهاية — سيؤدي إلى فشل تحليل JSON بالكامل. لا يوجد "تحليل جزئي" في JSON؛ إما يعمل أو لا يعمل. لهذا السبب أدوات مثل JSON Formatter و JSON Validator مفيدة جدًا. الصق JSON الخاص بك وسترى فورًا إذا كان هناك خطأ.
أخطاء JSON الشائعة (وكيفية إصلاحها)
بعد سنوات من العمل مع JSON، إليك الأخطاء التي أراها يرتكبها المطورون مرارًا وتكرارًا:
1. علامات اقتباس مفردة بدلاً من مزدوجة. هذا JavaScript صالح، لكنه ليس JSON صالحًا:
2. الفواصل الزائدة. JavaScript يسمح بها، JSON لا:
3. التعليقات. JSON ليس لديه صياغة للتعليقات. إذا كنت بحاجة لتعليقات في ملفات التكوين، فكر في استخدام JSONC (JSON with Comments، مدعوم من VS Code) أو انتقل إلى YAML.
4. المفاتيح بدون علامات اقتباس. في JavaScript يمكنك كتابة {name: "Sarah"}، لكن في JSON كل مفتاح يجب أن يكون نصًا بين علامتي اقتباس: {"name": "Sarah"}.
5. استخدام undefined. قيمة undefined في JavaScript غير موجودة في JSON. استخدم null بدلاً من ذلك.
العمل مع JSON في لغات مختلفة
أحد أكبر نقاط قوة JSON هو الدعم العالمي من لغات البرمجة. إليك كيف يبدو التحليل والتسلسل في اللغات الشائعة:
لاحظ كيف أن واجهات البرمجة متشابهة؟ parse/loads للقراءة، stringify/dumps للكتابة. معظم اللغات تتبع نفس النمط.
نصائح لأداء JSON
عندما تتعامل مع حمولات JSON كبيرة، يبدأ الأداء في الأهمية. إليك بعض النصائح العملية:
- صغّر الحجم للإنتاج. إزالة المسافات البيضاء من JSON يمكن أن تقلل حجم الملف بنسبة 10-30%. أداة JSON Minifier الخاصة بنا تفعل ذلك بنقرة واحدة.
- استخدم محللات التدفق للملفات الكبيرة. إذا كان ملف JSON الخاص بك بمئات الميغابايت، لا تحمله بالكامل في الذاكرة. مكتبات مثل
JSONStream(Node.js) أوijson(Python) تحلل بشكل تدريجي. - تجنب الهياكل المتداخلة بعمق. كل مستوى من التداخل يضيف عبء التحليل. إذا وجدت نفسك تتداخل أكثر من 4-5 مستويات، فكر في تسطيح نموذج البيانات.
- فكر في البدائل الثنائية للحالات القصوى. للأنظمة عالية الإنتاجية، تنسيقات مثل MessagePack أو BSON أو Protocol Buffers يمكن أن توفر حمولات أصغر 2-5 مرات وتحليلًا أسرع. لكنك تفقد سهولة القراءة البشرية، لذا هذا مقايضة.
JSON في تصميم API الواقعي
دعنا نلقي نظرة على كيفية هيكلة واجهات API الحقيقية لاستجاباتها بصيغة JSON. إليك نمط شائع لاستجابات API المقسمة إلى صفحات:
وإليك نمط شائع لاستجابة الخطأ:
هذه الأنماط شائعة جدًا لدرجة أنك ستجدها في كل REST API مصمم بشكل جيد تقريبًا. اتباع اصطلاحات كهذه يجعل واجهة API الخاصة بك أسهل للفهم من قبل المطورين الآخرين.
مرجع سريع لـ JSON
إليك ورقة مرجعية بكل ما يمكنك وضعه في مستند JSON:
| النوع | مثال | ملاحظات |
| String | "hello" | يجب استخدام علامات اقتباس مزدوجة |
| Number | 42, 3.14, -1, 2.5e10 | لا أصفار بادئة، لا ست عشري |
| Boolean | true, false | أحرف صغيرة فقط |
| Null | null | أحرف صغيرة فقط |
| Object | {"key": "value"} | المفاتيح يجب أن تكون نصوصًا بين علامتي اقتباس |
| Array | [1, 2, 3] | يمكن خلط الأنواع |
جربها بنفسك
مستعد لتطبيق هذه المعرفة؟ إليك الأدوات التي ستحتاج إلى حفظها في المفضلة:
- JSON Formatter — الصق JSON فوضوي واحصل عليه منسقًا بشكل جميل مع مسافات بادئة صحيحة.
- JSON Validator — تحقق بسرعة مما إذا كان JSON الخاص بك صالحًا نحويًا واحصل على رسائل خطأ واضحة عندما لا يكون كذلك.
- JSON Minifier — أزل المسافات البيضاء من JSON الخاص بك لحمولات الإنتاج.
قد يبدو JSON بسيطًا على السطح، لكن إتقان خصوصياته وأفضل الممارسات سيوفر لك ساعات لا حصر لها من تصحيح الأخطاء. الآن اذهب وابنِ شيئًا رائعًا!