أخطاء تحليل JSON: 10 أعطال شائعة وكيف تصلحها

2024-09-12

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

1. استخدام علامات اقتباس مفردة للمفاتيح أو النصوص

يتطلب JSON استخدام علامات اقتباس مزدوجة للمفاتيح والقيم النصية. JavaScript قد يقبل المفردة لكن JSON لا يقبلها.

خطأ شائع: Unexpected token ' in JSON at position …

غير صالح
{
  name: "Alice",
  "age": 30
}
بعد الإصلاح
{
  "name": "Alice",
  "age": 30
}

2. الفواصل الزائدة في النهاية

لا تضع فاصلة بعد آخر خاصية أو آخر عنصر في المصفوفة. بعض المحررات تضيفها تلقائيًا وتكسر محللات JSON الصارمة.

JavaScript من ES2019 يسمح بذلك في literals، لكن مواصفة JSON (RFC 8259) لا تسمح به إطلاقًا.

غير صالح
{
  "items": [1, 2, 3,],
  "tags": ["a", "b",]
}
بعد الإصلاح
{
  "items": [1, 2, 3],
  "tags": ["a", "b"]
}

3. مفاتيح بدون اقتباس

كل مفتاح يجب أن يكون نصًا داخل اقتباس مزدوج. الصيغة { active: true } غير صالحة في JSON.

{
  active: true,
  "score": 95
}

4. فاصلة ناقصة أو زائدة

الأزواج المتجاورة تحتاج فاصلة، والفواصل المكررة تسبب أخطاء Unexpected token.

فاصلة مفقودة
{
  "a": 1
  "b": 2
}
فاصلة زائدة
{
  "a": 1,, "b": 2
}

5. تسلسلات هروب خاطئة

في المسارات يجب مضاعفة الشرطة العكسية: \\ لكل \. الشرطة المفردة قد تسبب Bad escaped character.

غير صالح
{ "path": "C:\Users\data" }
بعد الإصلاح
{ "path": "C:\\Users\\data" }

6. NaN و Infinity و undefined

JSON لا يدعم قيم JavaScript الخاصة مثل NaN أو undefined. القيمة الفارغة القياسية هي null.

{ "value": NaN }

7. التعليقات

JSON لا يدعم تعليقات // أو /* */. احذف التعليقات قبل التحليل.

JSON5 و JSONC (مثل VS Code) قد يسمحان بالتعليقات، لكن هذا ليس إدخالًا صالحًا لـ JSON.parse. تبادل البيانات يجب أن يكون JSON صارمًا.

{
  // user profile
  "name": "Bob"
}

8. قيم متعددة في الجذر أو أقواس غير مغلقة

JSON صالح يعني كائن واحد أو مصفوفة واحدة في الجذر. نسيان } أو ] يؤدي غالبًا إلى Unexpected end of JSON input.

9. أرقام غير صالحة

لا أصفار بادئة مثل 007، ولا صيغة سداسية مثل 0xFF، ولا نقطة عشرية منفردة.

10. محارف تحكم غير مهربة

الأسطر الجديدة وعلامات الجدولة داخل النص يجب أن تكون \n و \t وليس محارف فعلية منسوخة من السجلات.

جرّبها عبر الإنترنت

الصق النص في الأداة. عند الفشل، الشريط الجانبي يعرض الرسالة ورقم السطر، والمحرر يميّز ذلك السطر تلقائيًا.

بعد الإصلاح، أعد التنسيق أو التصغير. ظهور رسالة النجاح يعني أن JSON أصبح صالحًا.