بيانات JSON (.json)
RFC قياسيتدوين كائنات JavaScript (JSON) تنسيق نصي خفيف وسهل القراءة لتبادل البيانات. وهو مستقل تماماً عن لغات البرمجة ويُستخدم على نطاق واسع في واجهات برمجة تطبيقات الويب.
تحويل JSON إلى HTML
محول مجاني داخل المتصفح للتحويل من JSON إلى HTML. قم بتحويل الملفات فوراً على جهازك.
ضغط JSON عبر الإنترنت
خاص - لا تغادر الملفات جهازك أبدًا
فحص البيانات الوصفية
تتعرف أنظمة التشغيل ومحللات الملفات على ملفات JSON من خلال فحص تسلسل البايت الثنائي البادئ:
توقيع رأس الملف على مستوى البايت (Magic Bytes)
تتعرف أنظمة التشغيل ومحللات الملفات على ملفات JSON من خلال فحص تسلسل البايت الثنائي البادئ:
التوقيع الست عشري (الإزاحة 0):
7B أو 5Bتمثيل ASCII: { أو [
التوحيد القياسي: RFC 8259 / ECMA-404 / ISO/IEC 21778
المواصفات الفنية
| هيكلية الحاوية | تنسيق تبادل بيانات خفيف الوزن، يعتمد على النصوص، ومستقل عن لغة البرمجة |
| الضغط | يمكن ضغط نصوص JSON باستخدام Gzip أو Brotli أو Zstandard (وتصل نسبة الضغط عادةً إلى 80%-90%). |
| ترتيب البايتات (Endianness) | Unicode بترميز UTF-8 (يُنصح بعدم تضمين علامة ترتيب البايتات BOM) |
| مساحات الألوان | لا ينطبق |
| القنوات والبنية | ستة أنواع بيانات أساسية: كائن، مصفوفة، نص، رقم، قيمة منطقية (boolean)، وقيمة فارغة (null) |
| الحد الأقصى للأبعاد | لا حدود محددة؛ ويقتصر الحجم على ذاكرة المحلل وأقصى طول للسلسلة النصية. |
| الشفافية | لا ينطبق |
| البث والتحميل التدرجي | تتيح NDJSON (JSON المفصول بأسطر جديدة) / أسطر JSON معالجة التدفق التقدمي |
مصفوفة المقارنة التقنية: JSON مقابل المنافسين
| السمة التقنية | JSON (الحالي) | YAML | XML | Protocol Buffers |
|---|---|---|---|---|
| تعقيد بناء الجملة | بسيط (6 أنواع، وصياغة صارمة) | عالي (يعتمد على المسافات البادئة، مواصفات معقدة) | عالي (وسوم إغلاق مطولة، مساحات أسماء) | تنسيق نقل ثنائي محدد بالمخطط |
| سرعة التحليل | سريع للغاية في جميع اللغات الحديثة | بطيء (تحليل المسافات البادئة المعقدة) | متوسط إلى بطيء (بناء DOM ثقيل) | سريع للغاية (إلغاء تسلسل ثنائي بدون نسخ) |
| دعم التعليقات | لا (استُبعدت عمداً لتجنب تزايد البيانات الوصفية) | نعم (تعليقات #) | نعم (تعليقات بصيغة <!-- -->) | نعم في ملفات proto. |
| حجم حمولة الشبكة | نص مدمج (نسبة ضغط gzip عالية جداً) | نص مدمج | نص مطول (تكرار ثقيل للوسوم) | ثنائي مدمج للغاية |
أنماط التلف الشائعة ودليل الاسترداد بالنظام الست عشري
SyntaxError: رمز غير متوقع , في JSON عند الموضع X.
السبب الجذري: فاصلة لاحقة بعد العنصر الأخير في مصفوفة أو كائن، وهو أمر محظور تماماً في مواصفات RFC 8259 لـ JSON.
الاسترداد: أزل الفواصل الزائدة بعد آخر عنصر في الكائنات والمصفوفات قبل تمرير النص إلى JSON.parse().
SyntaxError: رمز غير متوقع ' في JSON.
السبب الجذري: السلاسل النصية أو المفاتيح محاطة بعلامات اقتباس مفردة ('') بدلاً من علامات الاقتباس المزدوجة ("").
الاسترداد: استبدل علامات الاقتباس المفردة حول السلاسل النصية والمفاتيح بعلامات اقتباس مزدوجة.
تحليل الأمان ومتجهات الهجوم على المحلّل
JSON تنسيق نصي لا ينفّذ التعليمات البرمجية مباشرةً، لكن تحليل بيانات JSON غير الموثوقة قد يؤدي إلى تلويث النماذج الأولية أو هجمات ReDoS أو استنزاف الذاكرة.
ناقلات الهجوم المعروفة
- تلويث النماذج الأولية: قد تعدّل مفاتيح مثل __proto__ أو constructor الكائن Object.prototype في تطبيقات JavaScript.
- قد تتسبب البنى المتداخلة بعمق (مثل 10,000 قوس فتح) في تجاوز سعة المكدس وحجب الخدمة.
- فقدان دقة الأعداد: تفقد أعداد JavaScript الأكبر من 2^53 - 1 (9,007,199,254,740,991) دقتها بصمت.
أفضل الممارسات الدفاعية: لا تستخدم eval() لتقييم JSON مطلقاً. استخدم JSON.parse()، واستبعد خصائص __proto__ عند دمج الكائنات تكرارياً.
الأصول التاريخية والمحطات الرئيسية
المزايا الرئيسية والإيجابيات
- بنية نصية مقروءة للبشر، وموصوفة ذاتياً، وموجزة.
- دعم تحليل أصلي مدمج في محركات جافا سكريبت (JSON.parse) وكل لغة برمجة رئيسية.
- المواصفات الصارمة تمنع تنفيذ التعليمات البرمجية الاعتباطية.
القيود الفنية والسلبيات
- لا يوجد دعم للتعليقات، أو الفواصل اللاحقة، أو المراجع الدائرية للكائنات.
- لا توجد أنواع ثنائية أصلية (يجب ترميز البيانات الثنائية بـ base64، مما يزيد الحجم بنسبة 33%).
- تسلسل غير فعال مقارنة بالتنسيقات الثنائية مثل Protocol Buffers أو MessagePack.
معلومات تقنية طريفة
- أضاف دوغلاس كروكفورد إلى أدوات JSON الأصلية JSMin بنداً في الترخيص يقول: «يجب استخدام البرنامج للخير لا للشر».
- JSON مجموعة فرعية صارمة من صياغة JavaScript، لكن حتى ES2019 كانت المحارف الخام غير المهربة U+2028 وU+2029 صالحة في JSON وغير صالحة داخل سلاسل JavaScript.
- اكتشف دوغلاس كروكفورد أن المتصفحات المبكرة تستطيع تحويل JSON مباشرةً إلى كائنات باستخدام eval() الأصلي في JavaScript، قبل توحيد واجهات JSON.parse() في ECMAScript 5.
الأسئلة التقنية المتكررة
لماذا لا يسمح تنسيق JSON بالتعليقات؟
لا تسمح قواعد JSON النحوية بالتعليقات. وقد تختلف التطبيقات في تعاملها مع الامتدادات والبيانات الخاصة بالتطبيق، لذا لا يضمن التنسيق وحده قابلية التشغيل البيني.
كيف تخزن أعداداً صحيحة من 64 بت في JSON دون فقدان الدقة؟
نوع Number الأصلي في JavaScript هو عدد عشري عائم مزدوج الدقة وفق معيار IEEE 754، ولا يمثّل بدقة إلا الأعداد الصحيحة حتى 2^53 - 1. لذا يجب تسلسل الأعداد الصحيحة ذات 64 بت (مثل معرّفات قواعد البيانات والطوابع الزمنية) كسلاسل نصية في JSON، مثل «1234567890123456789».
ما الفرق بين JSON و NDJSON / أسطر JSON؟
تضع JSON القياسية كامل البيانات في كائن جذري واحد أو مصفوفة واحدة، ما يتطلب من المحللات تحميل النص كله قبل معالجته. أما NDJSON (JSON المفصولة بأسطر جديدة) فتفصل سجلات JSON الصالحة بعضها عن بعض بمحارف سطر جديد (\n)، ما يتيح معالجة مجموعات بيانات ضخمة بحجم عدة غيغابايتات سطراً بعد سطر بكفاءة في الذاكرة.
أزواج تحويل JSON ذات الصلة
يؤدي تحويل بيانات JSON إلى مصدر HTML إلى تحويل أزواج المفتاح والقيمة المهيكلة الخام إلى مستندات ويب قابلة للقراءة البشرية وجاهزة لعرض المتصفح.
يؤدي تحويل مصدر HTML إلى بيانات JSON إلى تحويل مستندات الويب القابلة للقراءة البشرية إلى أزواج مفتاح وقيمة مهيكلة للمعالجة البرمجية وإدخالها إلى واجهة برمجة التطبيقات.
يؤدي تحويل نص تفريغ SQL إلى تصدير بيانات JSON إلى تحويل جداول قواعد البيانات العلائقية الصلبة إلى كائنات مرنة ومتداخلة لتطبيقات الويب الحديثة.
يسمح تحويل ملفات نصوص JSON غير المنظمة إلى قواعد بيانات SQLite علائقية منظمة بالفهرسة والاستعلام السريع لسجلات البيانات الكبيرة.
يحوّل تحويل ملفات Adobe Swatch Exchange إلى هياكل JSON للألوان لوحات التصميم الثنائية إلى كائنات نصية مقروءة لتطبيقات الويب الحديثة.
يربط تحويل بيانات JSON النصية للألوان إلى عينات Adobe ASE الثنائية بين رموز التصميم المستخدمة على الويب وتطبيقات التخطيط المكتبي الاحترافية.
يؤدي تحويل ملفات نصوص لوحة ألوان GIMP إلى هياكل JSON للألوان إلى تمكين تطبيقات الويب من قراءة عينات الألوان مباشرة دون الحاجة إلى نصوص تحليل معقدة.
يؤدي تحويل ملفات JSON للألوان المنظمة إلى متغيرات CSS إلى تحويل كائنات البيانات الخام إلى خصائص تنسيق أصلية لمواقع الويب.