أدوات المطور · JSON المنسق والمدقق
سجل معايير JSON: RFC 4627 إلى RFC 8259 و ECMA-404
· خلفية
json المعايير تصديق
تم تحديد JSON أربع مرات على الأقل من قبل هيئتين للمعايير. يتتبع هذا المنشور المسار من json.org لـ Douglas Crockford إلى RFC 8259 وECMA-404، ويشرح ما تغير فعليًا للمطورين على طول الطريق.
ما هي المواصفات التي يتبعها المحلل اللغوي؟
ما هي المواصفات التي يتبعها المحلل؟ عادة ما تكون الإجابة مرئية عند الحواف وليس في الكائنات والمصفوفات العادية. اختبر سلسلة ذات مستوى أعلى مثل `"ready"`، وعلامة ترتيب البايت البادئة، وأسماء الأعضاء المكررة والأرقام الكبيرة بشكل غير عادي. تناقش المستندات المختلفة بناء الجملة وقابلية التشغيل البيني على مستويات مختلفة، بينما تضيف التطبيقات أنواع البيانات الخاصة بها وسلوك الأخطاء. تكون تسمية المعيار مفيدة فقط عندما يتم فصل عقد المحلل اللغوي عن الافتراضات المتعلقة بكل تطبيق JSON.
يعتبر دليل المستودع الخاص بـ ToolAcre ملموسًا وأضيق من سجل المعايير العامة. يستخدم المنسق `JSON.parse` لإنتاج القيم و`JSON.stringify` لبثها؛ بعد فشل التحليل، يوفر الماسح الضوئي المحلي موضعًا تشخيصيًا ثابتًا وسببًا.
json.org والوصف المبكر لـ JSON
json.org قدمت JSON كتدوين مضغوط مشتق من بناء جملة الكائن الحرفي لـ JavaScript ووثقت بنياتها الأساسية بقواعد نحوية صغيرة. ساعد هذا الوصف المبكر في منح المطورين اسمًا ومرجعًا مشتركًا للكائنات والمصفوفات والسلاسل والأرقام والقيم المنطقية والصفرية. من الآمن وصف الصفحة كتفسير عام مبكر بدلاً من الادعاء، دون الاستشهاد بأي دليل تاريخي هنا، بأن صفحة واحدة أو شخصًا اكتشف تنسيقًا بمفرده أو أثبت اعتماده.
لا تشتمل مصادر المستودع الحالية على سجل أرشيفي لـ json.org أو استخدام المتصفح أو مناقشات اللجنة. وهي توضح كيفية قيام هذا التطبيق بتحليل وتشخيص JSON اليوم. وبناءً على ذلك، تظل البيانات التاريخية الواردة في هذه المقالة قريبة من وثائق المعايير القديمة وتتجنب عزو الدوافع أو تأثيرات السوق التي لا تستطيع تلك الملفات المحلية إثباتها.
RFC 4627 في 2006 — الوصف IETF الأول ونوع وسائط التطبيق /json والقاعدة التي تنص على أن النص يجب أن يكون كائنًا أو مصفوفة
RFC 4627، منشور في 2006، ويوصف JSON لتبادل الإنترنت ويسجل نوع الوسائط `application/json`. يتطلب تعريفه للنص JSON وجود كائن أو مصفوفة في المستوى الأعلى، على الرغم من وجود السلاسل والأرقام والقيم الحرفية كقيم داخل تلك الحاويات. يعد هذا التقييد اختلافًا تاريخيًا مفيدًا لأن المستند الذي يحتوي على `"ready"` فقط يمكن أن يكون قيمة صالحة في صيغة لاحقة بينما يقع خارج تعريف النص RFC 4627 الخاص بـ JSON.
ناقشت الوثيقة أيضًا المخاوف المتعلقة بالتشفير والأمن في سياق التطبيقات المتاحة في ذلك الوقت. لا ينبغي قراءته كسجل تغيير لهذا المستودع: ToolAcre لا يحتوي على وضع التوافق RFC 4627، ويقوم مسار المحلل اللغوي الخاص به بتفويض بناء القيمة إلى محرك JavaScript المضيف.
ECMA-404 في 2013 — الحد الأدنى من معيار بناء الجملة فقط في Ecma، ولماذا انتهى الأمر بمنظمتين إلى وصف تنسيق واحد
ECMA-404، تم نشره لأول مرة في 2013، ويحدد بناء الجملة JSON في شكل مضغوط بشكل متعمد. ينصب تركيزها على القواعد النحوية لنص JSON الصالح بدلاً من ملف تعريف التبادل الكامل لكل استخدام شبكي. يساعد هذا النطاق في توضيح سبب قدرة ECMA-404 والمستندات IETF على وصف نفس الترميز الأساسي مع الاختلاف في إرشادات قابلية التشغيل البيني المحيطة التي يؤكدون عليها. إن وجود هيئتين للمعايير لا يعني وجود صيغتين غير متوافقتين في الاستخدام العادي.
تتطلب الادعاءات حول سبب اختيار المؤسسات لمسارات نشر معينة مصادر وثائقية تتجاوز قاعدة التعليمات البرمجية هذه، لذلك لا تستنتج هذه المقالة دوافع اللجنة من تواريخ المعايير. النقطة العملية ذات الصلة هي أن RFC 8259 وECMA-404 تهدف إلى التوافق في بناء الجملة، بينما RFC 8259 تقدم توصيات مهمة للتبادل القابل للتشغيل البيني.
RFC 7159 و RFC 8259
RFC 7159 استبدل RFC 4627 في 2014 وقام بتوسيع تعريف النص JSON إلى أي قيمة متسلسلة، وإزالة قاعدة المستوى الأعلى للكائن أو الصفيف فقط. RFC 8259 تم استبدال RFC 7159 في 2017 ويظل المرجع IETF الذي يتم الاستشهاد به عادةً لـ JSON. يتطلب الأمر UTF-8 لـ JSON المتبادلة بين الأنظمة خارج النظام البيئي المغلق ويسجل تحذيرات قابلية التشغيل البيني حول الأرقام والأسماء المكررة وUnicode وعلامات ترتيب البايت بدلاً من التظاهر بأن القواعد النحوية وحدها تضمن نتائج متطابقة في كل مكان.
المستوى الأعلى `true` هو طريقة مدمجة لمراقبة قاعدة القيمة الجذرية الحديثة في ToolAcre لأن `JSON.parse` يقبلها. توضح هذه النتيجة سلوك هذا التنفيذ؛ لا يتم إعادة البناء عندما يعتمد كل متصفح أو خادم أو API التعريف الأوسع.
ما الذي تغير بالنسبة للمطورين العاملين
بالنسبة للمطورين العاملين، فإن التغييرات الأكثر وضوحًا في المواصفات هي القبول الحديث لأي قيمة JSON في الجذر وتوجيه أقوى للتشفير القابل للتشغيل البيني. الدرس الأقل وضوحًا هو أن بناء الجملة الصحيح لا يزال يترك خيارات التنفيذ. قد يتم طي أسماء الكائنات المكررة، ولا يعد ترتيب الأعضاء عقدًا دلاليًا، وقد تفقد الأعداد الكبيرة جدًا الدقة، ويمكن أن تنتقل تسلسلات Unicode غير العادية بشكل مختلف عبر المكتبات. ولذلك يمكن أن تستحق الوثيقة المتوافقة مع المعايير قيودًا إضافية من مخطط التطبيق.
في هذا المنسق، تمر الأسماء المكررة ورموز الأرقام أولاً عبر `JSON.parse`، لذا فإن التنسيق اللاحق يعكس قيمة JavaScript الناتجة بدلاً من المستند المعجمي الأصلي. يساهم الماسح الضوئي في التشخيص بعد الفشل؛ ولا يحتفظ بالأعضاء المكررين أو الأرقام الدقيقة التعسفية. هذه ملاحظات مدعومة بالمستودع.
ما لا يغطيه هذا
ما لا يغطيه هذا هو المواصفات الموجودة أعلى JSON. JSON يصف المخطط القيود المفروضة على شكل المستند وقيمه؛ JSON يعالج المؤشر المواقع داخل المستند؛ JSON يمثل التصحيح التغييرات. إنها تحل مشكلات مختلفة من القواعد النحوية الأساسية ولا يجب معاملتها كإصدارات أحدث من JSON نفسها. JSONC، JSON5 وتنسيقات التأليف المشابهة تقوم أيضًا بتوسيع أو تغيير بناء الجملة المقبول وتتطلب محللين خاصين بها بدلاً من طيها في التحقق الصارم بصمت.
تتجنب هذه المقالة أيضًا التاريخ الاجتماعي الشامل لاعتماد JSON أو دعم المتصفح أو المنافسة مع XML لأن مصادر المستودع المدرجة لا يمكنها إثبات هذه الرواية. لم يتم اختراع أي اقتباسات خارجية لملء هذه الفجوة.
الوجبات الجاهزة: RFC 8259 هو المرجع الذي يجب الاستشهاد به
RFC 8259 هو المرجع العملي IETF للاستشهاد به من أجل إرشادات بناء الجملة وقابلية التشغيل البيني JSON الحالية، مع ECMA-404 الذي يوفر معيار بناء جملة Ecma المتوافق. RFC 4627 وRFC 7159 تظل مفيدة لفهم كيفية تغير التعريف المنشور، خاصة على المستوى الأعلى. استشهد بالمستند الذي يدعم المطالبة المحددة بدلاً من استخدام "مواصفات JSON" كنداء غامض للسلطة، وميز القواعد المعيارية عن سلوك التنفيذ الذي تمت ملاحظته في محلل معين.
بالنسبة إلى ToolAcre، البيان الذي يمكن الدفاع عنه هو أن المستودع يستخدم المحلل اللغوي والمتسلسل JavaScript الخاص بـ JSON ويضيف ماسحًا ضوئيًا محليًا صارمًا للتشخيصات بعد الفشل. تصف اختبارات القيم ذات المستوى الأعلى وعلامات الترقيم غير الصحيحة ومعالجة الأرقام هذا المسار؛ فهي ليست مصادر تاريخية.