البرمجة

استخدام JSON في JavaScript

استخدام JSON في JavaScript: دليل شامل وموسع

تُعد لغة JavaScript من أكثر لغات البرمجة شيوعًا واستخدامًا في تطوير الويب، ويرجع ذلك إلى مرونتها وقدرتها الكبيرة على التعامل مع البيانات. من بين أهم أنواع البيانات التي تتعامل معها JavaScript، تبرز صيغة JSON (JavaScript Object Notation) كواحدة من أكثر الصيغ استخدامًا لنقل وتخزين البيانات بشكل منسق وسهل القراءة. في هذا المقال سنقدم شرحًا موسعًا ومفصلًا حول كيفية استخدام JSON في JavaScript، مع التركيز على الجوانب العملية، الطرق المختلفة للتعامل معه، وأهميته في بيئات التطوير الحديثة.


ما هو JSON ولماذا نستخدمه؟

JSON هو اختصار لـ “JavaScript Object Notation”، وهو تنسيق نصي خفيف لتبادل البيانات يعتمد بشكل أساسي على بنية الكائنات والمصفوفات في JavaScript. تم تصميم JSON ليكون سهل القراءة والكتابة من قبل البشر، وفي نفس الوقت سهل التحليل والمعالجة من قبل الآلات.

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

  • سهولة الاستخدام والقراءة: يمكن للبشر قراءة ملفات JSON بسهولة بسبب البنية الواضحة والبسيطة.

  • دعم واسع: مدعوم من قبل جميع لغات البرمجة الحديثة وليس JavaScript فقط.

  • فعالية في التخزين والنقل: مقارنة ببعض التنسيقات الأخرى مثل XML، JSON أكثر خفة وأقل تعقيدًا.


البنية الأساسية لـ JSON

يتم التعبير عن البيانات في JSON باستخدام نوعين رئيسيين من الهياكل:

  1. الكائنات (Objects): وهي مجموعة من أزواج المفتاح والقيمة، تُكتب بين قوسين معقوفين {}، والمفتاح يجب أن يكون نصًا (string) محاطًا بعلامات اقتباس مزدوجة.

    مثال:

    json
    { "name": "أحمد", "age": 30, "isStudent": false }
  2. المصفوفات (Arrays): وهي قائمة مرتبة من القيم، تُكتب بين قوسين مربعين [].

    مثال:

    json
    ["تفاح", "موز", "برتقال"]

يمكن أن تكون القيم داخل JSON من الأنواع التالية: نصوص (strings)، أرقام (numbers)، كائنات (objects)، مصفوفات (arrays)، قيم منطقية (boolean)، أو القيمة null.


تحويل البيانات بين JSON و JavaScript

أحد أهم الاستخدامات لـ JSON في JavaScript هو تحويل البيانات من نص JSON إلى كائن JavaScript يمكن التفاعل معه، والعكس بالعكس.

1. تحويل JSON نصي إلى كائن JavaScript

يتم ذلك باستخدام الدالة JSON.parse()، التي تأخذ نص JSON وتعيد كائن JavaScript.

مثال:

javascript
const jsonString = '{"name": "ليلى", "age": 25, "hobbies": ["قراءة", "سباحة"]}'; const user = JSON.parse(jsonString); console.log(user.name); // ليلى console.log(user.hobbies[0]); // قراءة

إذا كان النص غير منسق بشكل صحيح أو يحتوي على أخطاء في البنية، فإن JSON.parse() سترمي خطأ (Exception)، لذلك من المفضل دائماً التعامل مع العملية ضمن كتلة try...catch لتجنب توقف البرنامج.

2. تحويل كائن JavaScript إلى JSON نصي

لتخزين البيانات أو إرسالها عبر الشبكة، نحتاج إلى تحويل كائن JavaScript إلى نص JSON. يتم ذلك باستخدام الدالة JSON.stringify().

مثال:

javascript
const user = { name: "سارة", age: 28, hobbies: ["رسم", "موسيقى"] }; const jsonString = JSON.stringify(user); console.log(jsonString); // الناتج: {"name":"سارة","age":28,"hobbies":["رسم","موسيقى"]}

تقبل JSON.stringify() معاملات اختيارية تمكنك من التحكم في تنسيق النص الناتج، مثل إضافة المسافات والفواصل لجعل النص أكثر قابلية للقراءة.


التعامل مع JSON في بيئة المتصفح

في متصفح الإنترنت، يستخدم JSON بشكل واسع في التعامل مع بيانات الخادم عبر واجهات برمجة التطبيقات (APIs)، خصوصًا من خلال تقنيات مثل AJAX أو fetch.

استخدام fetch لتحميل بيانات JSON

javascript
fetch('https://api.example.com/users') .then(response => response.json()) // تحويل الاستجابة إلى JSON .then(data => { console.log(data); }) .catch(error => { console.error('خطأ في جلب البيانات:', error); });

تقوم الطريقة response.json() تلقائيًا بتحليل النص المستلم وتحويله إلى كائن JavaScript.


التعامل مع JSON في Node.js

في بيئة Node.js، يمكن قراءة وكتابة ملفات JSON بسهولة باستخدام مكتبة fs (نظام الملفات)، حيث يعتبر JSON صيغة شائعة لتخزين البيانات.

قراءة ملف JSON وتحويله إلى كائن

javascript
const fs = require('fs'); fs.readFile('data.json', 'utf-8', (err, data) => { if (err) { console.error('خطأ في قراءة الملف:', err); return; } try { const obj = JSON.parse(data); console.log(obj); } catch (parseErr) { console.error('خطأ في تحليل JSON:', parseErr); } });

كتابة كائن JavaScript إلى ملف JSON

javascript
const fs = require('fs'); const data = { product: "حاسوب محمول", price: 1500, available: true }; fs.writeFile('output.json', JSON.stringify(data, null, 2), (err) => { if (err) { console.error('خطأ في كتابة الملف:', err); } else { console.log('تم حفظ الملف بنجاح.'); } });

التحكم في عملية التحويل

تتيح الدالتان JSON.stringify() وJSON.parse() خيارات متقدمة للتحكم في كيفية تحويل البيانات:

1. استخدام الـ replacer في stringify

الـ replacer هو معلمة اختيارية يمكن أن تكون مصفوفة أو دالة تُستخدم لتصفية أو تعديل القيم قبل التحويل إلى JSON.

مثال:

javascript
const user = { name: "يوسف", age: 40, password: "123456", city: "الرياض" }; const jsonString = JSON.stringify(user, ['name', 'age', 'city'], 2); console.log(jsonString);

الناتج سيحتوي فقط على المفاتيح name, age, و city مع استبعاد كلمة المرور.

2. استخدام الـ reviver في parse

الـ reviver هو دالة اختيارية تستخدم لتحويل القيم أثناء عملية التحليل.

مثال:

javascript
const jsonString = '{"name":"مريم","birthDate":"1990-01-01T00:00:00Z"}'; const obj = JSON.parse(jsonString, (key, value) => { if (key === 'birthDate') { return new Date(value); } return value; }); console.log(obj.birthDate instanceof Date); // true

هنا تم تحويل خاصية birthDate من نص إلى كائن تاريخ (Date).


التحديات والمشكلات الشائعة مع JSON

رغم سهولة التعامل مع JSON، إلا أن هناك بعض القواعد والقيود التي يجب الانتباه إليها لتجنب الأخطاء:

  • المفاتيح يجب أن تكون نصوصًا: لا يمكن أن تكون المفاتيح أرقامًا أو أنواعًا أخرى، ويجب دائماً وضعها بين علامات اقتباس مزدوجة.

  • عدم دعم القيم غير المعرفة (undefined) أو الدوال: عند تحويل كائن يحتوي على دوال أو قيم undefined فإنها تُهمل أو تُحذف من الناتج النهائي.

  • عدم القدرة على التعامل مع أنواع بيانات معقدة مباشرة: مثل تواريخ الـ Date أو كائنات مثل Map و Set بدون تحويل يدوي.

  • حساسية التوافق مع الترميز: يجب التأكد من أن النص الذي يُحلل باستخدام JSON.parse يتبع القواعد الصارمة لـ JSON، لأن أي خطأ صغير في التنسيق يؤدي إلى فشل التحليل.


مقارنة JSON مع صيغ أخرى لتبادل البيانات

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

في التطبيقات الحديثة، خاصة في بيئات الويب والهاتف المحمول، يكون JSON الخيار الأول لتبادل البيانات بسبب:

  • صغر حجم البيانات المرسلة.

  • سهولة التعامل معها مباشرة في JavaScript.

  • تكاملها الكبير مع أدوات ومكتبات برمجية متنوعة.


JSON في عمليات التخزين المحلية (Local Storage)

في متصفحات الويب، يمكن استخدام JSON لتخزين البيانات بشكل مؤقت أو دائم داخل المتصفح عن طريق خاصية Local Storage أو Session Storage. هذه الخاصية تسمح بتخزين البيانات كنص فقط، لذلك يجب تحويل الكائنات إلى نصوص JSON قبل التخزين.

مثال:

javascript
const user = { name: "خالد", preferences: { theme: "dark", language: "ar" } }; // تخزين البيانات localStorage.setItem('user', JSON.stringify(user)); // استرجاع البيانات const storedUser = JSON.parse(localStorage.getItem('user')); console.log(storedUser.preferences.theme); // dark

الجدول التالي يوضح مقارنة بين الخصائص الأساسية لـ JSON وأنواع البيانات التي يدعمها

نوع البيانات في JSON وصف وخصائص أمثلة
النص (String) نص محاط بعلامات اقتباس مزدوجة “مرحبا”, “2025-06-08”
الرقم (Number) أعداد صحيحة أو عشرية بدون علامات اقتباس 10, 3.14, -5
الكائن (Object) مجموعة أزواج المفتاح والقيمة {“name”:”علي”, “age”:22}
المصفوفة (Array) قائمة من القيم مرتبة [1, 2, 3], [“أحمر”, “أزرق”]
القيمة المنطقية (Boolean) true أو false true, false
القيمة الفارغة (null) تمثل عدم وجود قيمة null

الاستفادة العملية من JSON في تطوير التطبيقات

في بناء التطبيقات، JSON ليس مجرد وسيلة لتبادل البيانات بل يلعب دورًا محوريًا في:

  • تخزين البيانات المؤقتة داخل المتصفح أو التطبيق.

  • تبادل البيانات مع قواعد البيانات عبر واجهات API.

  • تهيئة الإعدادات وتحميل ملفات التكوين.

  • التكامل مع خدمات الطرف الثالث (مثل خدمات الطقس، الأخبار، أو الدفع).

هذا يجعل فهم التعامل مع JSON ضروريًا لأي مطور يرغب في بناء تطبيقات متكاملة وعصرية.


ملخص

صيغ JSON هي أداة لا غنى عنها في عالم تطوير الويب والتطبيقات الحديثة. من خلال دعمها المباشر في JavaScript، تجعل JSON عملية التعامل مع البيانات سهلة، سريعة، وفعالة. عبر استخدام JSON.parse وJSON.stringify، يمكن لأي مطور تحويل البيانات بسلاسة بين النص والكائنات، مما يسهل تبادل البيانات، التخزين، والتحكم بها. بالاضافة إلى سهولة دمج JSON مع تقنيات مثل fetch أو Node.js، فإن JSON تشكل حجر الزاوية في تطوير التطبيقات الحديثة.


المراجع