العربية

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

لماذا تنكسر الفاصلة الزائدة JSON وأين يشير المدقق

· كيف يعمل

json سير عمل المطور تصديق

لماذا تنفصل الفاصلة الزائدة عن JSON وحيث يتم توضيح نقاط التحقق باستخدام JSON الرموز المميزة وحدود التحقق الدقيقة
الرسم التوضيحي المتجه الأصلي ToolAcre

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

الخطأ المكون من حرف واحد والذي يستغرق العثور عليه عشر دقائق

الخطأ المكون من حرف واحد والذي يستغرق العثور عليه عشر دقائق - تكوين تم تحريره يدويًا، وفاصلة متبقية بعد الخاصية الأخيرة، وفشل البناء. يتبع المحلل اللغوي الصارم تسلسل الرمز المميز الموجود بالفعل في المستند. خذ بعين الاعتبار كائنًا ينتهي بـ `'enabled': true,` ومصفوفة تنتهي بـ `'blue',`: يعد كلا الفاصلين بعنصر آخر على الرغم من أن الرمز المميز التالي يغلق الحاوية.

ToolAcre لا يستمد الموقع من رسالة محرك المتصفح. JSON.parse يقرر الصلاحية أولاً؛ فقط بعد الفشل، يقوم الماسح الضوئي للمستودع بمسح النص والإبلاغ عن أول حرف غير مقبول. بالنسبة للفاصلة الزائدة، يكون هذا الحرف هو قوس الإغلاق أو القوس، والسبب يشير بوضوح إلى "فاصلة زائدة". في كائن ما، اسم عضو آخر بين علامات الاقتباس مفقود؛ في صفيف، قيمة كاملة أخرى مفقودة.

ما تقوله القواعد النحوية JSON بعد الفاصلة

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

الفاصل ينتمي بين عضوين أو عنصرين، وليس بعد العنصر الأخير. إزالة الفاصلة الأخيرة لا تغير أي قيمة أو ترتيب؛ فهو يستعيد القواعد النحوية التي تغلق الحاوية مباشرة بعد قيمتها النهائية. ولهذا السبب أيضًا يمكن أن تظهر الفاصلة بعد كل عنصر سابق دون مشكلة: كل واحدة من تلك الفاصلات يتبعها العنصر التالي الذي تعد به.

لماذا يقع الخطأ على قوس الإغلاق

لماذا يقع الخطأ على قوس الإغلاق - تعتبر الفاصلة قانونية في منتصف الحاوية، لذلك لا يمكن للمحلل رفضها بمجرد رؤيتها. يستهلك الفاصل ويغير الحالة ليتوقع اسمًا أو قيمة أخرى. يصبح التناقض مؤكدًا فقط عندما يصل `}` أو `]` بدلاً من ذلك. هذا المحدد هو المكان الذي يثبت فيه غياب العنصر الموعود، على الرغم من أن الفاصلة السابقة تسببت في انتقال الحالة.

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

JavaScript، بايثون واللينترات الحديثة تسمح بذلك، JSON لا تسمح بذلك

JavaScript، يسمح Python والنترز الحديث بذلك، JSON لا يسمح بذلك - غالبًا ما تسمح حرفية اللغة المصدر بفاصلة بعد العنصر الأخير لأنها تسهل مراجعة الأسطر المعاد ترتيبها والإضافات المستقبلية. قد يقوم المنسقون أيضًا بإدراج هذا النمط أو الحفاظ عليه. تنتمي هذه وسائل الراحة إلى قواعد كل لغة. يمكن أن يكون كائن `.js` الحرفي أو قاموس Python مصدرًا صالحًا بينما تظل نفس علامات الترقيم المرئية غير صالحة في مستند RFC 8259 JSON.

قد لا يُظهر المحرر الذي تم تكوينه لـ JavaScript أي تحذير عند انتهاء الجزء الملصق بفاصلة. لا يزال المحلل اللغوي للوجهة يتحكم في القبول. استخدم وضع اللغة JSON للنص `.json` وتحقق من صحة الحمولة الفعلية المرسلة إلى API أو حقل التكوين. إن التساهل في الملف المصدر أو linter أو المحلل اللغوي JSON5 ليس دليلاً قابلاً للتحويل بشأن مستهلك JSON الصارم.

مثال عملي: ثلاث فواصل زائدة في ملف واحد

مثال عملي: ثلاث فواصل زائدة في ملف واحد - لنفترض أن `features` ينتهي بـ `"beta",`، والكائن الذي يحتوي عليه ينتهي بـ `"enabled": true,`، وأن العضو الجذر الثاني لديه نفس الخطأ. يتوقف التحقق الأول عند قوس الإغلاق بعد `beta`. تسمح إزالة هذه الفاصلة بمواصلة التحليل حتى قوس الإغلاق بعد `true`، ويكشف إصلاح الموقع الثاني عن خطأ الكائن المتبقي على مستوى الجذر.

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

المتغيرات التي تنتج نفس الخطأ

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

لا ينبغي أن يتم تصنيف هذه الحالات تلقائيًا بفواصل زائدة. يعتمد السبب الدقيق على الموضع وحالة الحاوية. داخل `{"a":1,,"b":2}`، الفاصلة الثانية غير متوقعة حيث يجب أن يبدأ اسم العضو المقتبس. في `[ ,1]`، تظهر الفاصلة الأولى حيث تكون القيمة مطلوبة. افحص الرموز المميزة والتشخيصية المحيطة بدلاً من تطبيق قاعدة "حذف الفاصلة السابقة" العالمية خارج نمط محدد الإغلاق.

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

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

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

الوجبات الجاهزة: انظر إلى رمز واحد على يسار الموضع المُبلغ عنه

الخلاصة: انظر إلى رمز واحد على يسار الموضع المُبلغ عنه - عندما تكون علامة الإقحام تحت `}` أو `]`، ربما تكون الفاصلة السابقة قد وعدت بعضوًا أو عنصرًا لم يصل أبدًا. احتفظ بمحدد الإغلاق الضروري من الناحية الهيكلية وقم بإزالة الفاصل الطرفي فقط. ثم قم بالتحقق من صحة المستند بأكمله مرة أخرى، لأن الموقع الأول الذي تم إصلاحه قد يكشف عن فاصلة زائدة أخرى في حاوية لاحقة.

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