← العودة إلى المدونة

أخطاء JSON الشائعة وحلولها

تعلم كيفية تحديد وإصلاح أخطاء JSON الشائعة. دليل شامل مع أمثلة وحلول.

Big JSON Team12 دقيقة للقراءةtroubleshooting
B

Big JSON Team

Technical Writer

Expert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.

12 دقيقة قراءة

# أخطاء JSON الشائعة وحلولها

تعلم كيفية تجنب وإصلاح أخطاء JSON الأكثر شيوعاً.

الخطأ 1: الفاصلة الزائدة

المشكلة

{

"الاسم": "أحمد",

"العمر": 30,

}

رسالة الخطأ

SyntaxError: Unexpected token } in JSON

الحل

{

"الاسم": "أحمد",

"العمر": 30

}

النصيحة

لا تضع فاصلة بعد العنصر الأخير في الكائن أو المصفوفة.

الخطأ 2: علامات اقتباس خاطئة

المشكلة

{

'الاسم': 'أحمد',

"العمر": 30

}

الحل

{

"الاسم": "أحمد",

"العمر": 30

}

القاعدة

JSON يتطلب علامات اقتباس مزدوجة " فقط.

الخطأ 3: مفتاح بدون علامات اقتباس

المشكلة

{

الاسم: "أحمد",

العمر: 30

}

الحل

{

"الاسم": "أحمد",

"العمر": 30

}

ملاحظة

المفاتيح يجب أن تكون دائماً بين علامات اقتباس مزدوجة.

الخطأ 4: التعليقات

المشكلة

{

// هذا تعليق

"الاسم": "أحمد",

/ تعليق متعدد

الأسطر /

"العمر": 30

}

الحل

{

"الاسم": "أحمد",

"العمر": 30

}

ملاحظة

JSON لا يدعم التعليقات. استخدم JSON5 أو JSONC إذا كنت بحاجة للتعليقات.

الخطأ 5: الفاصلة المنقوطة

المشكلة

{

"الاسم": "أحمد";

"العمر": 30

}

الحل

{

"الاسم": "أحمد",

"العمر": 30

}

القاعدة

استخدم الفاصلة , وليس الفاصلة المنقوطة ;.

الخطأ 6: undefined

المشكلة

{

"الاسم": "أحمد",

"القيمة": undefined

}

الحل

{

"الاسم": "أحمد",

"القيمة": null

}

البدائل

// استخدم null

{

"القيمة": null

}

// أو احذف الحقل

{

"الاسم": "أحمد"

}

الخطأ 7: دوال JavaScript

المشكلة

{

"الاسم": "أحمد",

"التحية": function() { return "مرحباً"; }

}

الحل

{

"الاسم": "أحمد",

"الرسالة": "مرحباً"

}

ملاحظة

JSON لا يدعم الدوال، فقط البيانات.

الخطأ 8: أرقام غير صالحة

المشكلة

{

"الرقم1": 0x1A,

"الرقم2": Infinity,

"الرقم3": NaN

}

الحل

{

"الرقم1": 26,

"الرقم2": null,

"الرقم3": null

}

القاعدة

استخدم أرقام عشرية عادية فقط.

الخطأ 9: أقواس غير متطابقة

المشكلة

{

"المستخدمون": [

{"الاسم": "أحمد"},

{"الاسم": "فاطمة"

]

}

رسالة الخطأ

SyntaxError: Unexpected token ]

الحل

{

"المستخدمون": [

{"الاسم": "أحمد"},

{"الاسم": "فاطمة"}

]

}

الخطأ 10: أحرف خاصة غير مهربة

المشكلة

{

"الرسالة": "قال "مرحباً""

}

الحل

{

"الرسالة": "قال \"مرحباً\""

}

الأحرف التي تحتاج escape

{

"علامة_اقتباس": "\"",

"شرطة_مائلة": "\\",

"سطر_جديد": "سطر\nجديد",

"tab": "محاذاة\tبـtab"

}

الخطأ 11: BOM (Byte Order Mark)

المشكلة

ملف JSON يبدأ بـ BOM غير مرئي.

رسالة الخطأ

SyntaxError: Unexpected token

الحل

احفظ الملف بترميز UTF-8 بدون BOM.

في VS Code:
1. افتح الملف
  • اضغط على "UTF-8 with BOM" في الشريط السفلي
  • اختر "Save with Encoding"
  • اختر "UTF-8"
  • الخطأ 12: مسافات بيضاء خاصة

    المشكلة

    استخدام مسافات Unicode خاصة بدلاً من المسافة العادية.

    الحل

    استخدم مسافة عادية (space) فقط.

    أدوات كشف الأخطاء

    1. JSONLint

    // عبر الإنترنت
    

    // https://jsonlint.com

    // أو برمجياً

    const jsonlint = require('jsonlint');

    try {

    jsonlint.parse(jsonString);

    console.log('JSON صالح');

    } catch (e) {

    console.error('خطأ في السطر', e.line, ':', e.message);

    }

    2. JSON.parse مع معالجة الأخطاء

    function validateJSON(jsonString) {
    

    try {

    JSON.parse(jsonString);

    return { valid: true, error: null };

    } catch (error) {

    return {

    valid: false,

    error: {

    message: error.message,

    position: error.message.match(/position (\d+)/)?.[1]

    }

    };

    }

    }

    // الاستخدام

    const result = validateJSON('{"الاسم": "أحمد",}');

    if (!result.valid) {

    console.error('خطأ:', result.error.message);

    }

    3. محررات الكود

    VS Code:
    • يظهر الأخطاء تلقائياً
    • خط أحمر متعرج تحت الخطأ
    • رسالة الخطأ عند المرور بالماوس

    تصحيح الأخطاء خطوة بخطوة

    الخطوة 1: حدد الخطأ

    try {
    

    JSON.parse(jsonString);

    } catch (error) {

    console.log('رسالة الخطأ:', error.message);

    console.log('نوع الخطأ:', error.name);

    }

    الخطوة 2: حدد الموقع

    ابحث عن رقم السطر أو الموضع في رسالة الخطأ:

    SyntaxError: Unexpected token } in JSON at position 45

    الخطوة 3: استخدم أداة تحقق

    الصق JSON في JSONLint للحصول على موقع دقيق للخطأ.

    الخطوة 4: أصلح الخطأ

    استخدم الأمثلة أعلاه لإصلاح النوع المناسب من الخطأ.

    الخطوة 5: تحقق مرة أخرى

    تأكد من صحة JSON بعد الإصلاح.

    أخطاء شائعة في JavaScript

    خطأ 1: نسيان stringify

    // خطأ
    

    fetch('/api/users', {

    method: 'POST',

    body: { الاسم: 'أحمد' }

    });

    // صحيح

    fetch('/api/users', {

    method: 'POST',

    body: JSON.stringify({ الاسم: 'أحمد' })

    });

    خطأ 2: تحليل غير صحيح

    // خطأ - قد يتعطل
    

    const data = JSON.parse(response);

    // صحيح - مع معالجة الأخطاء

    try {

    const data = JSON.parse(response);

    } catch (error) {

    console.error('فشل تحليل JSON:', error);

    }

    خطأ 3: مراجع دائرية

    const obj = { الاسم: 'أحمد' };
    

    obj.مرجع = obj;

    // خطأ - مرجع دائري

    try {

    JSON.stringify(obj);

    } catch (error) {

    console.error('خطأ:', error.message);

    // TypeError: Converting circular structure to JSON

    }

    أخطاء شائعة في Python

    خطأ 1: استخدام علامات اقتباس مفردة

    import json
    
    

    # خطأ - Python dict ليس JSON

    data = "{'الاسم': 'أحمد'}"

    json.loads(data) # خطأ!

    # صحيح

    data = '{"الاسم": "أحمد"}'

    json.loads(data) # يعمل

    خطأ 2: نسيان ensure_ascii

    import json
    
    

    data = {"الاسم": "أحمد"}

    # سيء - أحرف Unicode مهربة

    bad = json.dumps(data)

    print(bad) # {"\u0627\u0644\u0627\u0633\u0645": ...}

    # جيد - العربية تظهر بشكل صحيح

    good = json.dumps(data, ensure_ascii=False)

    print(good) # {"الاسم": "أحمد"}

    نصائح للوقاية

    1. استخدم Linter

    قم بإعداد linter في محررك للكشف عن الأخطاء تلقائياً.

    2. استخدم Schema

    استخدم JSON Schema للتحقق من صحة البنية:

    import Ajv from 'ajv';
    
    

    const ajv = new Ajv();

    const schema = {

    type: 'object',

    properties: {

    الاسم: { type: 'string' },

    العمر: { type: 'number' }

    },

    required: ['الاسم']

    };

    const validate = ajv.compile(schema);

    const valid = validate(data);

    if (!valid) {

    console.log('أخطاء:', validate.errors);

    }

    3. استخدم prettier

    # تثبيت
    

    npm install --save-dev prettier

    # تنسيق JSON

    prettier --write "*/.json"

    4. اختبر دائماً

    // اختبار JSON قبل الاستخدام
    

    function isValidJSON(str) {

    try {

    JSON.parse(str);

    return true;

    } catch {

    return false;

    }

    }

    if (isValidJSON(jsonString)) {

    // استخدم البيانات

    }

    قائمة تحقق سريعة

    عند مراجعة JSON، تحقق من:

    • ✅ جميع المفاتيح بين علامات اقتباس مزدوجة
    • ✅ جميع القيم النصية بين علامات اقتباس مزدوجة
    • ✅ لا توجد فاصلة بعد العنصر الأخير
    • ✅ جميع الأقواس متطابقة
    • ✅ لا توجد تعليقات
    • ✅ لا توجد قيم undefined أو NaN
    • ✅ الأحرف الخاصة مهربة بشكل صحيح
    • ✅ الترميز UTF-8 (للنصوص العربية)

    الملخص

    أخطاء JSON الشائعة:

    • الفواصل الزائدة - الأكثر شيوعاً
    • علامات الاقتباس - يجب أن تكون مزدوجة
    • التعليقات - غير مدعومة
    • أنواع غير صالحة - undefined, NaN, functions

    استخدم الأدوات والمحررات الجيدة لتجنب الأخطاء!

    Share:

    مقالات ذات صلة

    Read in English