انتقل إلى المحتوى

أخطاء JSON "unexpected token": اعثر على السطر وأصلحه

توقف المحلل عند حرف لا يسمح به JSON. إليك ما يعنيه كل رمز، وكيف تعثر على السطر بالضبط، وكيف تصلحه.

بقلم Shahzad Ali ·

ماذا يعني الخطأ

"Unexpected token } in JSON at position 412" و"Unexpected end of JSON input" و"Unexpected token < in JSON at position 0": كل رسالة من هذه تأتي من محلل JSON قرأ شيئًا لا تسمح به الصيغة. JSON صارم: فاصلة زائدة واحدة أو تعليق أو علامة اقتباس مفردة تكفي، ويتوقف المحلل عند أول حرف لا يقبله، وهو غالبًا حرف بعد الخطأ الحقيقي.

الأسباب الخمسة المعتادة

اقرأ الرمز (token) في الرسالة فهو يخبرك أيها لديك:

  • Unexpected token < at position 0: النص صفحة HTML وليس JSON. أجاب الخادم بصفحة خطأ أو تسجيل دخول. افتح العنوان في المتصفح وانظر ما الذي يعيده فعلًا.
  • Unexpected token u at position 0: النص هو الكلمة undefined. كان المتغير فارغًا قبل تحليله.
  • Unexpected end of JSON input: النص ينتهي مبكرًا، عادةً استجابة فارغة أو ملف انقطع أثناء الحفظ.
  • Unexpected token } أو ]: فاصلة زائدة قبل قوس الإغلاق ({"a": 1,})، وهو ما يسمح به JavaScript ولا يسمح به JSON.
  • Unexpected token ' أو حرف: علامات اقتباس مفردة، أو مفاتيح بلا اقتباس ({name: "x"})، أو تعليق (// أو /* */)، أو الكلمات True وNone وNaN وInfinity القادمة من Python وليست JSON.

اعثر على الموضع بالضبط

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

أصلحه تلقائيًا إن كان أحد الأخطاء المعتادة

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

وحين يصبح النص صالحًا، يعيد منسّق JSON إزاحته أو يصغّره إلى سطر واحد، ويعرض شكل الشجرة بنيته.

علامة ترتيب البايتات عند الموضع 0

الملف المحفوظ بصيغة "UTF-8 مع BOM" يبدأ بثلاثة بايتات غير مرئية. ترفضها بعض المحللات برسالة "Unexpected token in JSON at position 0" (الرمز هنا هو الحرف غير المرئي). احفظ الملف بصيغة UTF-8 عادية أو احذف الحرف الأول. ويقرأ المدقق هذه الملفات، فإذا نجح التحقق هنا وفشل في برنامجك فالفرق على الأرجح هو علامة BOM.

ما زال غير صالح؟

راسلنا على support@openanydoc.com والصق رسالة الخطأ والحروف العشرة حول السطر المذكور (من دون بيانات شخصية).