Jannah Theme License is not validated, Go to the theme options page to validate the license, You need a single license for each domain name.

JSONC مقابل JSON وكيفية اختيار الأنسب لمشروعك

ما هو JSONC وهل هو أفضل من JSON؟

JSONC هو نسخة موسعة من JSON التقليدي، تسمح بإضافة التعليقات داخل ملفات التكوين دون كسر تنسيق البيانات. بينما JSON مشهور ببساطته وسهولة قراءته، يقدم JSONC ميزة إضافية للمطورين الذين يحتاجون لتوثيق تفاصيل التكوين مباشرة داخل الملف. هذا التنسيق مفيد بشكل خاص في المشاريع الكبيرة أو فرق العمل التي تعتمد على مشاركة الملفات مع توضيحات، ويجعل إدارة البيانات أكثر وضوحًا. في هذا المقال نستعرض الفروق الأساسية بين JSON وJSONC، ونوضح متى يكون كل منهما الأنسب لمشروعك.

an-illustration-showing-a-blue-jsonc-file-icon-a-dark-code-window-with-comment-lines-and-white-curly-brace-symbols JSONC مقابل JSON وكيفية اختيار الأنسب لمشروعك

أصبح JSON تنسيق بيانات شائع الاستخدام، يُستخدم في استجابات واجهات برمجة التطبيقات (API)، وملفات حفظ الألعاب، وعمليات التهيئة. لكن يعتقد الكثيرون أنه يمكن تحسينه، وقد بُذلت محاولات عديدة لتوسيعه أو تحسينه. JSONC هي إحدى هذه المحاولات.

ما هو JSONC، ولماذا أُنشئ؟

ترميز كائنات جافا سكريبت (JSON) هو تنسيق نصي سهل القراءة لتخزين البيانات المنظمة، باستخدام أزواج الاسم والقيمة، والمصفوفات، والقيم القياسية. تأثر بشكل كبير ببنية جافا سكريبت – ومن هنا جاء اسمه – ولكنه يُستخدم الآن في جميع لغات البرمجة تقريبًا، عبر أنواع مختلفة من البيئات، كتنسيق محايد لتبادل البيانات.

على الرغم من شعبيته، إلا أن JSON له انتقاداته. أكثر الشكاوى شيوعًا تتعلق ببنيته، وعادةً ما تكون واحدة مما يلي:

لا يسمح بالتعليقات.
لا يسمح بالفاصلة اللاحقة (فاصلة بعد آخر عنصر في مصفوفة أو آخر خاصية في كائن).

يتطلب استخدام المفاتيح (أسماء الخصائص) بين علامتي اقتباس مزدوجتين.

لا يدعم هذا الكود السلاسل النصية متعددة الأسطر.

بمعنى آخر، هذا الكود JSON غير صالح:

{
	// One of "dark", "light", or "auto"
	theme: "light",
	
	description: "This is a description
	wrapped over multiple lines for ease
	of reading",

	// I like LOADS of spaces!
	tab-width: 8,
}

بدلاً من ذلك، يجب كتابة هذه البيانات على النحو التالي:

{
	"theme": "light",

	"description": "This is a description wrapped over multiple lines for ease of reading",

	"tab-width": 8
}

JSONC هي محاولة واحدة من بين محاولات عديدة لتحسين JSON. تشمل التنسيقات الأخرى التي تحاول القيام بشيء مماثل YAML وJSON5. كلٌّ منهما عبارة عن مجموعة فرعية من JSON، لذا فإن JSON الصحيح هو أيضًا JSONC وYAML وJSON5 الصحيح. تختلف التنسيقات في مدى سعيها لتوسيع بنية JSON.

اقرأ أيضا:  كيف تحميك شبكة VPN وما حدود الأمان التي توفرها لجهازك

يُجري YAML تغييرات كبيرة، وقد وجد مكانًا له في التكوين، وأحيانًا في التوثيق. يُعدّ هذا التنسيق مزيجًا بين Markdown وJSON، مع وجود مسافة بادئة للتضمين، وأنواع بيانات مخصصة، وسلاسل نصية متعددة الأسطر. يُستخدم YAML في مشاريع مثل Docker Compose، وسير العمل في GitHub Actions، وإطار عمل Ruby on Rails.

programming-yaml-example JSONC مقابل JSON وكيفية اختيار الأنسب لمشروعك

في الوقت نفسه، يُعد JSON5 لغة JavaScript صالحة، مثل JSON، لذا فهو أكثر صرامةً في هذا التركيب النحوي. يهدف JSON5 إلى معالجة جميع الشكاوى المذكورة أعلاه بشأن JSON، بل وأكثر، ولكنه يبقى مشابهًا جدًا لـ JSON. يُستخدم JSON5 في برمجة Chromium وNext.js وmacOS.

أما JSONC، فهو “JSON مع تعليقات”، لذا فهو يركز كليًا على السماح بالتعليقات داخل بيانات JSON. هذا يعني أنه يدعم مزيجًا من المثالين السابقين:

    {
	// One of "dark", "light", or "auto"
	"theme": "light",

	/*
   I like LOADS
   of spaces!
   */
	"tab-width": 8
}

يدعم JSONC شكلين شائعين من التعليقات:

  • تبدأ التعليقات المضمنة بـ // وتستمر حتى نهاية سطرها فقط.
  • تبدأ التعليقات المجمعة بـ /* وتنتهي بـ */، ويمكن أن تحتوي على أي عدد من الأسطر.

الشكل الشائع الثالث للتعليق – وهو نفس التعليق المضمن، ولكنه يبدأ بعلامة “#” واحدة – غير مدعوم.

ملاحظة
التعليقات التي تبدأ بعلامة “#” ليست شائعة جدًا في البرمجة، لكنها النوع الوحيد من التعليقات الذي تسمح به نصوص bash.

ما هي مزايا وعيوب JSONC؟

JSONC أقل شيوعًا بكثير من JSON، وهذا بحد ذاته عيب. إذًا، ما الذي تقدمه JSONC، وهل يكفي لنجاح الصيغة البديلة؟

اقرأ أيضا:  ميزات مذهلة في تحديث Jellyfin الأخير تجعل خادم البث أكثر سلاسة واستقرارًا

التعليقات غالبًا ما تكون قيّمة
أولًا، أعتقد شخصيًا أن التعليقات تُعدّ ميزة أكبر من إصلاح أي من مشاكل JSON الشائعة الأخرى. قد تُسهّل التغييرات في بناء الجملة للتعامل مع علامات الاقتباس والفواصل الأمور، لكنها لا تُقدّم أي مزايا جوهرية بنفس القدر. للتعليقات في ملفات JSON استخدامان مهمان:

  • ملفات التكوين: تُستخدم التعليقات كأمثلة أو كنص إرشادي في قوالب التكوين، كما يُمكن استخدامها لشرح سبب اختيار تكوين مُعين.
  • شرح البيانات: يُمكن للمطورين تضمين تعليقات إلى جانب البيانات لشرح غرضها أو كيفية تفاعلها مع البيانات الأخرى.

ملاحظة
يمكن أيضًا استخدام التعليقات لتعطيل أجزاء من الشيفرة البرمجية مؤقتًا، مثل ملفات الشيفرة المصدرية، لأغراض التصحيح أو الاختبار. لكن هذا الاستخدام أقل شيوعًا في ملفات البيانات، مثل JSON، نظرًا لأنها قد تُسبب ارتباكًا بسهولة عند تمرير البيانات بين مصادر مُختلفة.

تُوفر التعليقات وسيلةً للتوثيق المُستقل؛ فبدونها، يجب شرح ملفات JSON في مكان آخر، في مكان قد لا يكون واضحًا أو مُتاحًا بسهولة. هناك حل آخر مُحتمل وهو إضافة بيانات “وهمية”، مثل:

    {
   "theme-comment": "The theme value should be one of 'dark', 'light', or 'auto'",
   "theme": "dark"
}

على الرغم من أن هذا قد ينجح، إلا أنه هش لأنه يعتمد على أي نظام يقرأ هذه البيانات لتجاهل المفاتيح التي لا يتعرف عليها.

مع ذلك، ضع في اعتبارك أن التعليقات ليست مفيدة بشكل عام. ربما يكون دوغلاس كروكفورد، المحدِّد الأصلي لـ JSON، أفضل من يُقدِّم هذه الحجة:

لقد حذفتُ التعليقات من JSON لأنني رأيتُ أن البعض يستخدمونها لحفظ توجيهات التحليل، وهي ممارسة كانت ستُقوِّض التوافقية.

بعبارة أخرى، التعليقات مُعرَّضة للإساءة، وهو ما يمنعه حظرها.

لا يتعامل مع الفواصل اللاحقة أو المفاتيح غير المُقتبَسة.

كما شرحتُ سابقًا، أعتبر هذا أقل أهمية، ولكنه لا يزال عيبًا بسيطًا. إذا كنا سنحاول إصلاح JSON بترقية غير متوافقة مع الإصدارات السابقة، فمن الأفضل لنا إصلاح كل ما يُمكننا إصلاحه.

الفواصل اللاحقة أسهل في الصيانة، مما يُقلِّل الأخطاء ويُحدِّث تصحيحات أكثر دقة. لا يسمح JSON بها لأسباب تاريخية تتعلق بتعقيد بناء جملة JavaScript. لكن يمكننا إصلاح ذلك الآن، وربما ينبغي علينا ذلك، حتى لو كانت الفوائد ضئيلة.

اقرأ أيضا:  كيف تغير الروبوتات مستقبل الرعاية الصحية في المستشفيات

JSONC غير متوافق مع JSON

على الرغم من أن JSONC هو مجموعة فرعية من JSON، لذا فإن جميع ملفات JSON الصحيحة هي أيضًا JSONC صحيحة، إلا أن العكس لا يعمل. ستفشل معظم الأدوات التي تتطلب JSON إذا حاولت استخدامها مع ملف JSONC.

programming-jsonc-jq-error JSONC مقابل JSON وكيفية اختيار الأنسب لمشروعك

قد لا يُمثل هذا مشكلةً لاستخدامك الشخصي، ولكنه يُصعّب اعتماد JSONC على نطاق واسع.

المعالجة المسبقة مُرهقة.

يُصبح التوافق أقل صعوبةً إذا كان من السهل تحويل JSONC إلى JSON.

يُمكنك استخدام أداة JSMin من دوغلاس كروكفورد للقيام بذلك. لكن تركيبة التعليقات المُختارة في JSONC تعني أنه يجب أن يكون مُحلل JSON مُتكاملاً لضمان التعرّف على التعليقات في سياقها بشكل صحيح.

إذا تمت الإشارة إلى التعليقات برمز “#” واحد في العمود 0، فسيكون المُحوّل سهلاً:

<input.jsonc grep -v '^#' >output.json

هذا يعني أنه يُمكن تحديث أي مُحلِّل JSON بسهولة لدعم JSONC، بدلاً من إجراء تغييرات جوهرية في الكود أو الاعتماد على برنامج خارجي مثل JSMin.

كيف يُمكنني استخدام JSONC اليوم؟

في أغلب الأحيان، ستواجه JSONC عند الحاجة إلى تغيير بعض الإعدادات. على سبيل المثال، يقرأ برنامج fastfetch ملف إعدادات بتنسيق JSONC، ما يُتيح لك إضافة ملاحظات أو اقتراحات أو أي شيء آخر ترغب في إضافته.

إذا كنت تعمل على الكود الخاص بك وترغب في كتابة شيء يتعامل مع JSONC بالإضافة إلى JSON، فلديك خياران رئيسيان. أولاً، يُمكنك استخدام أداة مثل JSMin والتعامل مع JSONC بنفس الطريقة التي تتعامل بها مع JSON.

أو يُمكنك استخدام مكتبة تتعامل مع JSONC، مما يُزيل الاعتماد على برنامج مُنفصل. يستخدم كود fastfetch مكتبة yyjson، وهي مكتبة C تتعامل مع تعليقات JSONC بالإضافة إلى الفواصل اللاحقة والمزيد. يؤدي node-jsonc-parser من Microsoft شيئًا مشابهًا لـ JavaScript ويدعم أيضًا الفواصل النهائية.

JSONC يقدم حلاً مرنًا للمطورين الذين يحتاجون لتوضيح بيانات التكوين عبر التعليقات دون التأثير على تنسيق JSON التقليدي. بينما يظل JSON الخيار الأبسط والأكثر انتشارًا للمشاريع الصغيرة، فإن JSONC يسهل إدارة المشاريع الكبيرة وتحسين التعاون بين الفرق. اختيار التنسيق يعتمد على طبيعة المشروع وحجم الفريق ودرجة الحاجة لتوثيق البيانات داخل الملفات نفسها.

زر الذهاب إلى الأعلى