كل المقالات

JSON Repair: لماذا يتعطّل JSON وكيف يُصلَح

JSON «المعطّل» مشكلة شائعة: يبدو الملف صحيحًا تقريبًا، لكن المحلِّل يرفض قراءته. أحد الأسباب الأقل وضوحًا ولكن الشائع فعليًا هو استخدام أرقام غير التي يتوقعها JSON.

الأسباب الشائعة لـ JSON غير الصالح

  • فاصلة زائدة قبل قوس الإغلاق — {"a": 1,} — يتساهل معها جافاسكريبت لكن لا يتساهل معها محلِّل JSON صارم.
  • علامات اقتباس مفردة بدل المزدوجة — شائعة عند النسخ من كائن حرفي في جافاسكريبت.
  • مفاتيح بلا علامات اقتباس{name: "أحمد"} بدل {"name": "أحمد"}.
  • التعليقات — لا تسمح مواصفات JSON بالتعليقات إطلاقًا، على عكس JSON5 أو JSONC.
  • مخرجات مقطوعة — إذا قُطعت استجابة API أو ملف سجل في المنتصف، يبقى المستند غير مغلق.

الأرقام الهندية الشرقية: خطأ صامت من لوحة مفاتيح عربية

أنظمة تشغيل وتطبيقات كثيرة تعرض لوحة مفاتيح عربية تُدخل الأرقام بالصيغة الهندية الشرقية (٠١٢٣٤٥٦٧٨٩) بدلاً من الأرقام العربية الغربية المعتادة في البرمجة (0123456789). المشكلة أن معيار JSON يشترط أن تكون كل الأرقام داخل قيمة رقمية من مجموعة ASCII الغربية فقط — رقم مكتوب هكذا {"age": ٢٥} غير صالح إطلاقًا، ولن يتعرف عليه أي محلِّل JSON قياسي بصفته رقمًا. أداة الإصلاح قد تكتشف الرمز غير المتوقع، لكنها لا تملك دائمًا وسيلة أكيدة لتحويله تلقائيًا إلى القيمة الرقمية الصحيحة المقصودة.

كيف يعمل الإصلاح التلقائي

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

حدود الممكن

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

عندما يكون الإصلاح غامضًا

بعض الأعطال لها عدة إصلاحات محتملة متساوية في الوجاهة. سلسلة مقطوعة مثل {"a": 1, "b": 2 يمكن إغلاقها بمجرد إضافة قوس — وفقدان بيانات إذا كان المقصود فعليًا حقلًا إضافيًا. تعتمد استدلالات الإصلاح افتراض «الأقل تخريبًا»، لكن هذا تخمين لا ضمان له.

جرّب الأداة