العربية

أدوات المطور · JSON المنسق والمدقق

قواعد JSON الكاملة في صفحة واحدة: ستة أنواع من القيم وحاويتين

· خلفية

json المعايير تصديق

قواعد JSON بأكملها في صفحة واحدة: ستة أنواع من القيم وحاويتين موضحتين برموز JSON وحدود دقيقة للتحقق من الصحة
الرسم التوضيحي المتجه الأصلي ToolAcre

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

كل خطأ رأيته على الإطلاق يأتي من صفحة واحدة

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

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

القيم الستة — الكائن، والمصفوفة، والسلسلة، والرقم، وصحيح/false، وفارغة، وحقيقة أنه لا يوجد شيء آخر

القيمة JSON هي كائن أو صفيف أو سلسلة أو رقم أو منطقية أو فارغة. يمكن أن تحتوي الكائنات والمصفوفات على أي من العناصر الستة، بما في ذلك المزيد من الحاويات. التهجئة الحرفية هي بالضبط `true`، `false` و `null`؛ الكتابة بالأحرف الكبيرة ليست مرنة. الرموز مثل `True`، `None`، `undefined`، `NaN` و `Infinity` خارج نطاق JSON الصارم حتى عندما تتعرف لغة أخرى على بعضها.

هذه القائمة المختصرة تجعل التصنيف أسلوبًا مفيدًا لتصحيح الأخطاء. في `{"reading": NaN}`، تقدم النقطتان قيمة بشكل صحيح، ولكن لا يمكن لـ `N` أن تبدأ أي قيمة مسموح بها. استبدلها فقط بعد تحديد معنى البيانات، ربما `null` أو حالة مقتبسة. يمكن لأداة بناء الجملة رفض الرمز المميز؛ ولا يمكنه اختيار بديل التطبيق أو تحديد ما إذا كان الحقل ينتمي إليه أم لا.

الكائنات والمصفوفات - الأعضاء المفصولة بفواصل، والنقطتان، ولماذا يترك RFC 8259 ترتيب الأسماء وتكرارها لعمليات التنفيذ

تحتوي الكائنات على أعضاء name/value مفصولين بفواصل. كل اسم عبارة عن سلسلة ذات علامات اقتباس مزدوجة متبوعة بنقطتين وقيمة. تحتوي المصفوفات على قيم مفصولة بفواصل بدون أسماء أو نقطتين. تعتبر حاويات `{}` و`[]` الفارغة صالحة، ولكن لا يمكن للفاصلة أن تؤدي أو تتبع أو تظهر مرتين. تؤدي مطابقة كل محدد مع الحاوية الخاصة به إلى كشف العديد من حالات فشل "الرمز المميز غير المتوقع" بشكل سريع.

من المتوقع أن تكون أسماء الكائنات فريدة، ومع ذلك لا يتم رفض التهجئة المكررة بواسطة أداة التحقق هذه. يوزع `{"port": 80, "port": 443}`، ويحتفظ `JSON.parse` بالقيمة اللاحقة. يقوم التنسيق بعد ذلك بإصدار ذلك العضو الباقي فقط، لذا لا يمكن استرداد النص السابق من النتيجة. تتصرف مواضع المصفوفة بشكل مختلف: يظل كل عنصر موجودًا ويكون ترتيبه جزءًا من القيمة.

السلاسل والأرقام بدقة

تستخدم السلاسل علامات الاقتباس المزدوجة. قد تقدم الشرطة المائلة العكسية علامة اقتباس، أو شرطة مائلة عكسية، أو شرطة مائلة، `b`، `f`، `n`، `r`، `t`، أو هروب Unicode المكون من أربعة أرقام؛ أحرف التحكم الخام محظورة. علامات الاقتباس المفردة هي رموز عادية غير صالحة خارج السلسلة. تشرح هذه القواعد لماذا يمكن أن تبدو الأحرف الحرفية المنسوخة JavaScript والنص متعدد الأسطر الملصق قابلين للقراءة أثناء فشل التحقق الصارم من صحة JSON.

قد يحتوي الرقم على علامة ناقص وجزء صحيح وكسر اختياري وأُس اختياري. لا يمكن أن يبدأ بـ `+`، أو استخدام التدوين السداسي العشري، أو وضع صفر بادئ قبل رقم آخر، أو تهجئة قيمة غير محددة. `-0.25e+2` صالح؛ `01`، `.5`، `2.` و `Infinity` ليست كذلك. يقوم التحليل بالتحقق من القواعد النحوية، وليس ما إذا كان JavaScript يمكنه الاحتفاظ بكل رقم بالضبط.

المسافة البيضاء والمستوى الأعلى

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

يمكن أن يكون المستند الكامل أي قيمة JSON واحدة، وليس كائنًا أو صفيفًا فقط. `42` و`false` و`"ready"` هي نصوص صالحة من المستوى الأعلى. والممنوع هو قيمة ثانية بعد الأولى: `42 43` وثيقتان وليست واحدة. يشرح هذا التمييز لماذا يتطلب JSON المحدد بسطر جديد معالجة سجل بسجل بدلاً من تحليل عادي واحد للملف بأكمله.

مثال عملي: تحليل مستند صغير باليد

خذ `{"order": [17, null, {"paid": true}], "note": "ship soon"}`. يبدأ الكائن الجذر بعضو اسمه `order`؛ قيمته عبارة عن مصفوفة تحتوي على رقم وخالي وكائن آخر. بعد ذلك، تقدم الفاصلة `note`، وقيمته عبارة عن سلسلة تحتوي على سطر جديد تم تخطيه. كل نقطتين وفاصلة ومحدد إغلاق له دور نحوي واحد.

الآن قم بإزالة الاقتباس قبل `paid`. بعد القوس المتداخل، يتوقع المحلل اللغوي قوس إغلاق أو اسمًا مقتبسًا، لذا يفشل عند `p`. وبدلاً من ذلك، أضف فاصلة بعد `true`؛ يقبل المحلل اللغوي الفاصلة ثم يفشل عند `}` لأنه يجب أن يتبعه عضو آخر. إن توقع هذه المواضع يدويًا يحول التحقق من الصحة إلى تأكيد ولا يشجع على إجراء تعديلات عشوائية على علامات الترقيم.

ما لا يغطيه هذا

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

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

الخلاصة: احفظ النحو، وثق بالمنصب

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

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