الدليل لتنسيق JSON

مقدمة تقنية مبسطة عن بنية البيانات الأكثر استخداماً في الويب

ما هو تنسيق JSON؟

تنسيق JSON (اختصار لـ JavaScript Object Notation) هو عبارة عن بنية نصية خفيفة الوزن تُستخدم لتبادل البيانات بين الأنظمة المختلفة. بالرغم من أن اسمه مقتبس من لغة جافاسكربت، إلا أنه أصبح "اللغة الوسيطة" (Lingua Franca) لجميع لغات البرمجة بلا استثناء.

الفكرة ببساطة إننا بنحتاج طريقة موحدة عشان السيرفر يكلم المتصفح، أو تطبيق يكلم تطبيق تاني. JSON بيوفر الطريقة دي في شكل أزواج من "المفتاح والقيمة" (Key-Value pairs)، زي ما بنشوف في المثال البسيط ده الخاص ببيانات طالب:

{
  "name": "أحمد",
  "age": 25,
  "is_graduated": true
}

ليه بنستخدم JSON؟

الاعتماد على JSON لم يأتِ من فراغ، بل لعدة أسباب تقنية تجعله الخيار الأفضل:

عشان نوضح الصورة أكتر، تخيل إننا بنعمل تطبيق امتحانات، وعايزين نبعت سؤال من قاعدة البيانات للمستخدم. بنجمع بيانات السؤال، الاختيارات، الإجابة الصحيحة، والتفسير في كائن JSON واحد كالتالي:

{
    "question": "جسم كتلته 2 kg يتحرك على سطح أفقي أملس بقوة مقدارها 8 N. ما مقدار تسارعه؟",
    "choices": [
        "4 m/s²",
        "6 m/s²",
        "8 m/s²"
    ],
    "answer": "4 m/s²",
    "explanation": "نستخدم القانون الثاني لنيوتن: F = ma، وبالتالي a = F / m = 8 / 2 = 4 m/s²."
}

بهذا الشكل، يمكن لأي واجهة مستخدم (Front-end) قراءة هذا الكائن بسهولة وعرضه للمستخدم النهائي بتنسيق جميل.

الفرق بين JSON و JSONL

في حين أن JSON ممتاز لتمثيل كائن مفرد أو مصفوفة من الكائنات، إلا أنه يواجه مشاكل في الأداء "Performance Bottlenecks" عندما نتعامل مع قواعد بيانات ضخمة جداً (Big Data) أو عند تدريب نماذج الذكاء الاصطناعي؛ لأن محلل البيانات (Parser) قد يضطر لتحميل الملف كاملاً في الذاكرة (RAM).

هنا يأتي دور JSONL (JSON Lines). الفكرة الجوهرية فيه هي وضع كائن JSON مستقل وصالح بحد ذاته في كل سطر مفرد بدون فواصل , بين السطور وبدون أقواس مصفوفة [] تحيط بالملف بأكمله.

مثال على ملف بيانات بصيغة JSONL يحتفظ بسجلات تدريب (Training Records):


{"prompt": "ما وحدة قياس شدة التيار الكهربائي؟", "completion": "وحدتها الأمبير."}
{"prompt": "ما الكوكب الأقرب إلى الشمس؟", "completion": "عطارد هو الكوكب الأقرب إلى الشمس."}

بهذه الطريقة، تستطيع الأنظمة قراءة ومعالجة الملف "سطراً بسطر" (Streaming) دون إرهاق الذاكرة، وهو ما يفسر شعبيته الكاسحة في إعداد مجموعات البيانات (Datasets) الخاصة بنماذج تعليم الآلة.