العربية

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

لماذا يفشل ملف JSON في التحقق من الصحة في السطر 2، العمود 1

· كيف يعمل

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

لماذا يفشل ملف JSON في التحقق من الصحة في السطر 2، العمود 1 الموضح برموز JSON المميزة وحدود التحقق الدقيقة من الصحة
الرسم التوضيحي المتجه الأصلي ToolAcre

يحتوي ملف ‎.jsonl على العديد من مستندات JSON، وليس مستندًا واحدًا، لذا يتوقف المدقق الصارم تمامًا حيث يبدأ المستند الثاني. يشرح هذا المنشور JSON الخطوط واصطلاحات NDJSON وكيفية التحقق من صحتها سجلًا واحدًا في كل مرة.

صالح في كل سطر، غير صالح كملف

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

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

نص واحد، قيمة واحدة - ما يحدده RFC 8259 كنص JSON ولماذا تعتبر قيمتان في المستوى الأعلى في صف واحد خطأ نحوي

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

على سبيل المثال، يحتوي `{"ok":true} {"ok":false}` على كائنين صالحين بشكل فردي ولكنه ليس نصًا واحدًا JSON. تحليل الكائن الأول يستهلك قيمة كاملة؛ تحليل السلسلة بأكملها يجب أن يرفض `{` الثاني. لتمثيل كلتا القيمتين في JSON العادي، ضعهما داخل مصفوفة وأضف الفاصلة المطلوبة بين عناصر المصفوفة.

JSON الخطوط و NDJSON

JSON الأسطر وNDJSON — الاصطلاحات المحددة بالسطر الجديد، وسبب وجودها للبث والسجلات، وكيف تختلف عن المصفوفة JSON. يحمل كل سطر فعلي قيمة JSON واحدة كاملة، وعادةً ما يكون كائنًا، ويعمل السطر الجديد كإطار خارج القواعد النحوية JSON. يمكن للمنتجين إلحاق السجلات ويمكن للمستهلكين معالجتها بشكل متزايد دون تحميل مجموعة كاملة.

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

لماذا يكون الخطأ دائمًا في السطر 2، العمود 1

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

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

مثال عملي: التحقق من صحة ثلاثة سجلات سجل

مثال عملي: التحقق من صحة ثلاثة سجلات سجل - التحقق من كل سطر بمفرده مقابل تغليفها في مصفوفة بفواصل. لنفترض أن الأسطر تحتوي على `{"level":"info"}`، و`{"level":"warn"}`، و`{"level":"error"}`. يقوم المدقق الموجه نحو الخط بتوزيع ثلاثة مدخلات منفصلة ويمكنه تحديد السجل الدقيق إذا كان لدى أحدهم علامة اقتباس مفقودة أو فاصلة زائدة.

لإجراء فحص صارم للمستند بالكامل، قم بتحويل العينة إلى `[{"level":"info"},{"level":"warn"},{"level":"error"}]`. تحدد الأقواس جذرًا واحدًا وتحدد الفواصل عناصره. لا تقم فقط باستبدال الأسطر الجديدة بفواصل: فهذا ينتج ثلاثة جذور مفصولة بعلامات الترقيم ما لم تتم إضافة المصفوفة المحيطة، ويمكن أن يسيء التعامل مع الأسطر الفارغة التي قد تمنعها الاتفاقية المصدر أو تتجاهلها.

التحويل بين الشكلين

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

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

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

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

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

الوجبات الجاهزة: تعرف على الشكل الذي تحمله

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

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