أدوات المطور · JSON المنسق والمدقق
كيف يجد المدقق JSON السطر والعمود الدقيقين للخطأ
· كيف يعمل
json تصديق سير عمل المطور
تقوم محركات المتصفح بالإبلاغ عن حالات فشل JSON.parse بشكل مختلف، وبعضها يعطي فقط إزاحة أحرف. يشرح هذا المنشور كيف يقوم المدقق بتحويل ذلك إلى سطر وعمود، ولماذا يشير الموضع إلى المكان الذي توقف فيه التحليل بدلاً من المكان الذي ارتكبت فيه الخطأ.
رسالة الخطأ التي لا تخبرك بأي شيء - لماذا يعتبر "الرمز المميز غير المتوقع في JSON في الموضع 1432" عديم الفائدة في ملف مكون من سطر 400
يعد خطأ مثل "رمز مميز غير متوقع" أمرًا محبطًا في التكوين الطويل لأنه لا يوفر موقعًا يمكنك فتحه في المحرر الخاص بك. JSON.parse هو المحلل اللغوي المعتمد للمتصفح، ولكن النص التشخيصي الخاص به يختلف بين محركات JavaScript وإصداراتها. ToolAcre لا يخمن الموقع عن طريق مطابقة سلسلة خطأ إنجليزية غير مستقرة. إذا فشل JSON.parse، فسيقوم ماسح ضوئي صارم منفصل بفحص النص الأصلي لتحديد الحرف الأول الذي لا يمكن لقواعد JSON قبوله.
ما يفعله المحلل اللغوي JSON فعليًا أثناء قراءته - جولة عبر الترميز والقواعد النحوية التكرارية التي تستهلك قيمة واحدة في كل مرة
يحتوي JSON على ستة أحرف بنيوية - الأقواس والأقواس والنقطتان والفاصلة - والقيم التي يمكن أن تكون سلاسل أو أرقامًا أو صفائف أو كائنات أو صحيحة أو خاطئة أو خالية. يحتاج الماسح الضوئي إلى معرفة ما إذا كان موجودًا داخل سلسلة مقتبسة قبل استدعاء الفاصلة بالفاصل: {"note": A,B"} له قيمة واحدة، وليس اثنتين. فهو يتنقل عبر قيمة أو عضو كائن ويتحقق مما يمكن أن يتبعه قانونيًا بعد ذلك. RFC 8259 يحدد هذه القواعد، وعلى عكس JavaScript الكائنات الحرفية، فإنه لا يسمح بالتعليقات أو الفواصل اللاحقة.
من إزاحة الأحرف إلى السطر والعمود - حساب الأسطر الجديدة حتى إزاحة الفشل، ولماذا تؤدي نهايات CRLF والأحرف متعددة البايت إلى تعقيد عملية العد
يبدأ الماسح عادةً بإزاحة صفرية في السلسلة الأصلية JavaScript. لجعل ذلك مفيدًا، قم بحساب فواصل الأسطر قبل الإزاحة واكتشف مدى الفشل من الفاصل الأخير. يجب التعامل مع CRLF على أنها نهاية سطر مرئي واحد، وليس سطرين؛ المواضع في JavaScript عدد السلاسل UTF-16 وحدات الكود، وليس UTF-8 بايت على القرص. يمكن أن يشغل الرمز التعبيري غير BMP وحدتي تعليمات برمجية في محرر يعرض حرفًا رسوميًا واحدًا بشكل مرئي. تعرض واجهة المستخدم سطرًا وعمودًا ومقتطفًا حتى تتمكن من التحقق من علامة الإقحام مقابل الملف الذي قمت بلصقه.
عندما لا يكون توقف التحليل هو مكان الخطأ - يتم الإبلاغ عن فاصلة مفقودة في المفتاح التالي، ويمكن أن يؤدي الاقتباس الضال إلى دفع الخطأ بعدة أسطر لأسفل
غالبًا ما يكون الرمز المستحيل الأول بعد الخطأ الأصلي. في الكائن، يؤدي نسيان الفاصلة بعد true إلى جعل الاقتباس الذي يبدأ الخاصية التالية غير قانوني: كان المحلل اللغوي يتوقع فاصلة أو قوس إغلاق. قد تتسبب السلسلة غير المنتهية في ظهور الخطأ عند فاصل أسطر لاحق أو نهاية الإدخال. اقرأ للخلف من النقطة المبلغ عنها للعثور على المحدد المفقود؛ لا تفترض أنه يجب حذف الحرف الموجود أسفل علامة الإقحام.
مثال عملي: تكوين بفاصلة واحدة مفقودة - الموضع المُبلغ عنه، والرموز المميزة المحيطة، وكيفية الرجوع للخلف للوصول إلى السبب الحقيقي
جرب المستند الحرفي المكون من ثلاثة أسطر {"name":demo"، متبوعًا بـ "enabled":true في السطر الثاني و"port":8080} في السطر الثالث، بدون فاصلة بعد true. ToolAcre سطر التقارير 3، العمود 1، الإزاحة 31: كان يتوقع فاصلة أو } بعد الخاصية السابقة، ويظهر علامة إقحام أسفل علامة الاقتباس الأولى لـ "المنفذ". أدخل فاصلة في نهاية السطر الثاني، ثم قم بالتحقق مرة أخرى. هذا تشخيص للعائق النحوي الأول، وليس حكمًا على أن كلمة "منفذ" خاطئة.
كيف تختلف محركات المتصفح - تقوم V8 وSpiderMonkey وJavaScriptCore بصياغة نفس الفشل بشكل مختلف، ولهذا السبب يساعد تقرير السطر والعمود المتسق
استخدمت V8 وSpiderMonkey وJavaScriptCore صياغة مختلفة وأحيانًا مقتطفات سياقية مختلفة لنفس الفشل JSON.parse. يوفر الماسح الضوئي الخاص بـ ToolAcre السبب الهيكلي والموقع الخاص به عندما يرفض المحلل اللغوي الأصلي القيمة. إذا لم يتفق الماسح الضوئي مع JSON.parse، فستقوم الأداة بإرجاع خطأ المحرك بدلاً من اختلاق موضع. يعد هذا الإجراء الاحتياطي أكثر أمانًا من الإشارة بثقة إلى شخصية تم تخمينها.
ما لا يغطيه هذا - المشكلات الدلالية مثل الأنواع الخاطئة أو الحقول المفقودة أو انتهاكات المخطط، والتي لن يقوم مدقق بناء الجملة بوضع علامة عليها أبدًا
قد يظل الكائن الصحيح من الناحية التركيبية خاطئًا في تطبيقك: الحقل المطلوب المفقود أو العمر المكتوب كنص أو مفتاحين مكررين أو مرجع إلى ملف غير موجود لا يعد غير صالح تلقائيًا JSON. RFC 8259 يقول أن أسماء الأعضاء يجب أن تكون فريدة لقابلية التشغيل التفاعلي، ولكن مجرد التحليل لا يفرض مخطط API الخاص بك. التحقق من صحة بناء الجملة هنا والتحقق من صحة القيود الدلالية في البرنامج الذي يستهلك الوثيقة.
الوجبات الجاهزة: اقرأ الموضع باعتباره "الرمز المميز الأول الذي لا يمكن للقواعد قبوله" - وكيف يقوم المنسق والمدقق JSON بالإبلاغ عن هذا السطر والعمود دون تحميل النص
تعامل مع الموقف المبلغ عنه على أنه "الرمز الأول الذي لا يمكن أن يقبله هذا النحو." اعمل بشكل عكسي على السبب، وأصلح مشكلة واحدة وأعد التشغيل. يقوم JSON المنسق والمدقق بإجراء ذلك محليًا دون تحميل تكوين تم لصقه. لا تلصق بيانات اعتماد الإنتاج الحقيقية في أي موقع ويب عام إذا كان بإمكان المحرر غير المتصل تشخيص الملف بدلاً من ذلك.