JSON مقابل JSON5 مقابل JSONC
الخلاصة: مجموعات شاملة صارمة بالترتيب: JSONC يضيف التعليقات؛ وJSON5 يضيف الاقتباسات المفردة والمفاتيح بلا اقتباسات والفواصل الزائدة والأعداد الست عشرية. والاختيار الخاطئ يكسر API، لا محررك.

الخلاصة: استخدم JSON القياسي كلما عبرت البيانات حدود نظام، ولا تستخدم JSONC إلا للتهيئة المحلية التي يحررها البشر؛ واذهب إلى JSON5 عندما تحتاج اقتباسات مفردة أو فواصل زائدة أو مفاتيح بلا اقتباسات، لكن تأكد أولًا أن المحمّل يدعمه.
في سطر واحد: JSONC هو JSON مع تعليقات؛ وJSON5 هو JSON مع عادات JavaScript.
مصفوفة الميزات
| الميزة | JSON | JSONC | JSON5 |
|---|---|---|---|
| السلاسل النصية باقتباسات مزدوجة | ✅ | ✅ | ✅ |
| السلاسل النصية باقتباسات مفردة | ❌ | ❌ | ✅ |
| مفاتيح بلا اقتباسات | ❌ | ❌ | ✅ |
تعليقات سطر // |
❌ | ✅ | ✅ |
تعليقات كتلة /* */ |
❌ | ✅ | ✅ |
| فواصل زائدة | ❌ | ❌ | ✅ |
أعداد ست عشرية 0xFF |
❌ | ❌ | ✅ |
Infinity / NaN |
❌ | ❌ | ✅ |
| سلاسل نصية متعددة الأسطر | ❌ | ❌ | ✅ |
| قابلة للقراءة بمحللات قياسية | ✅ | ❌ | ❌ |
لاحظ أن JSONC يحل التعليقات فقط. كثيرون يفترضون أن "JSON الذي يسمح بالتعليقات" يسمح أيضًا بالفواصل الزائدة؛ لكن tsconfig.json ما زال يفشل عند واحدة.
ما يستخدمه كل منها
JSON — التبادل. APIs وقوائم الانتظار وأعمدة JSON في قواعد البيانات والسجلات. كل ما هو آلة إلى آلة.
JSONC — تهيئة المحرر. يحلل VS Code هذه الملفات بنفسه، فلا يراها JSON.parse أبدًا. لا يوجد RFC؛ إنه اصطلاح فعلي بقيادة Microsoft.
JSON5 — مجموعة شاملة متسامحة للبشر. كان الهدف "تهيئة تبدو ككائن JavaScript حرفي". الأنسب لملفات .json5 المحمّلة بأدوات البناء؛ أوسع صياغة وأضيق دعم أدوات.
الاختيار
| الحالة | الاختيار |
|---|---|
| أجسام الطلبات أو الردود | JSON، لا بديل |
| أعمدة JSON في MySQL / PostgreSQL | JSON، فدوالها لا تقبل غيره |
| تهيئة مشروع تحتاج توضيحًا | JSONC إن كان مدعومًا، وإلا YAML |
| تريد تراخي نمط JS | JSON5، بعد تأكيد دعم المحمّل |
| سيعمل عليها غير المهندسين | YAML، فالإزاحة أفضل من الأقواس |
فخ سهل
تحليل ملف JSONC كـJSON صارم ينتج خطأً يشير إلى التعليق:
SyntaxError: Unexpected token / in JSON at position 42
قبل حذف التعليق، تحقق هل الملف مخصص ليكون JSONC. احذفه وقد تصطدم بفاصلة زائدة بعد سطرين.
الأسئلة الشائعة
كيف أختار بين JSONC وJSON5؟
استخدم JSONC عندما تكون التعليقات هي الشيء الوحيد الذي تحتاجه: يضيف // و/* */ فوق JSON، ويستخدمه settings.json وtsconfig.json في VS Code. واستخدم JSON5 عندما تريد أيضًا اقتباسات مفردة أو مفاتيح بلا اقتباسات أو فواصل زائدة أو أعدادًا ست عشرية أو سلاسل متعددة الأسطر. كلاهما يعتمد على المحمّل، فتأكد أن الأداة التي تقرأ الملف تدعمه.
لماذا لا يمكن قراءة ملف JSONC كـJSON قياسي؟
JSONC اصطلاح فعلي، لا RFC منفصل، لذا ترفضه المحللات القياسية. وJSON.parse على ملف كهذا يرمي Unexpected token /، مشيرًا إلى التعليق لا إلى البيانات. ولا يجب كتابة JSONC إلا للتهيئة التي يقرأها محرر أو محلل مخصص.
هل يجب أن أرسل ملف JSON5 إلى API؟
لا. APIs وأعمدة JSON في قواعد البيانات وقوائم الانتظار تحلل JSON صارمًا، فتُرفض اقتباسات JSON5 المفردة ومفاتيحه بلا اقتباسات وفواصله الزائدة. JSON5 للتهيئة المحلية التي يحررها البشر؛ حوّله إلى JSON قياسي قبل أن يعبر حدود نظام.