نسيت قوس إغلاق في منتصف ملف JSON، فلماذا يشير الخطأ إلى سطر لاحق أو إلى آخر الملف؟

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

نُشر في · دقائق قراءة: 3

المحلّل يقرأ إلى الأمام فقط

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

الحالة الأولى: مصفوفة لم تُغلق

{ "items": [1, 2, "name": "x" }

نسينا ] بعد 2. الأداة تقول: خطأ عند السطر 3، العمود 8. لماذا هناك؟ بعد الفاصلة التي تلي 2 ما زال المحلّل داخل المصفوفة، فيقبل "name" كعنصر ثالث نصي. ثم يجد النقطتين : عند العمود 8، وهذه لا تأتي داخل مصفوفة، فيتوقف. رسالة المحلّل في متصفح مبني على Chromium تشبه: Expected ',' or ']' after array element. كلمة ] في الرسالة هي التلميح: هناك مصفوفة تنتظر أن تُغلق.

الحالة الثانية: قوس الكائن الخارجي ناقص

{ "items": [1, 2], "name": "x"

هنا نقص } الأخير. الأداة تقول: JSON غير صالح، انتهى النص قبل اكتماله، عند السطر 4، العمود 1. أي أن الملف انتهى والمحلّل ما زال ينتظر شيئًا. رسالة «انتهى النص قبل اكتماله» تعني دائمًا أن قوسًا أو علامة تنصيص فُتحت ولم تُغلق.

الحالة الثالثة: الخطأ في السطر التالي مباشرة

{ "items": [1, 2 }

نسينا ] أيضًا، لكن السطر التالي هو } مباشرة. الخطأ عند السطر 3، العمود 1: المحلّل وجد قوس إغلاق الكائن وهو ما زال داخل المصفوفة. هنا الخطأ قريب من السبب، لكن السبب ما زال في السطر الذي قبله.

كيف ترجع إلى السبب؟

  1. الصق الملف في منسّق ومدقّق JSON واقرأ السطر والعمود ورسالة المحلّل.
  2. اضغط «انتقل إلى موضع الخطأ». إن ذكرت الرسالة ] فابحث عن مصفوفة مفتوحة، وإن ذكرت } فابحث عن كائن مفتوح.
  3. ارجع من موضع الخطأ إلى الأعلى، وحدد آخر [ أو { لم يُغلق قبل ذلك الموضع.
  4. أضف القوس الناقص في مكانه الصحيح، لا عند موضع الخطأ بالضرورة.
  5. تحقق أن الأداة تقول «JSON صالح»، ثم اختر «تنسيق»: الإزاحة في الناتج تجعل كل مستوى واضحًا، فتتأكد أن كل عنصر وقع في مكانه.

حذار من الحل السريع: إضافة القوس عند موضع الخطأ قد تجعل النص صالحًا لكن ببنية خاطئة، مثل مفتاح name يصبح داخل المصفوفة. بعد التصحيح انظر إلى الناتج المنسّق لا إلى رسالة «صالح» وحدها.

أسئلة شائعة

هل تضيف الأداة القوس الناقص تلقائيًا؟

لا. لا تصلح شيئًا، لأنها لا تعرف أين كنت تقصد إغلاق المصفوفة.

لماذا يختلف نص رسالة الخطأ بين المتصفحات؟

لأن الرسالة تأتي من محلّل كل متصفح. اعتمد على السطر والعمود، فالأداة تعرضهما بالشكل نفسه في كل متصفح.

الملف كبير جدًا، هل أستطيع فحصه؟

حتى 5 ميغابايت. افتح الملفات الكبيرة بزر «افتح ملف JSON» بدل اللصق، فهو أسرع.