استخدام JSON في JavaScript: دليل شامل وموسع
تُعد لغة JavaScript من أكثر لغات البرمجة شيوعًا واستخدامًا في تطوير الويب، ويرجع ذلك إلى مرونتها وقدرتها الكبيرة على التعامل مع البيانات. من بين أهم أنواع البيانات التي تتعامل معها JavaScript، تبرز صيغة JSON (JavaScript Object Notation) كواحدة من أكثر الصيغ استخدامًا لنقل وتخزين البيانات بشكل منسق وسهل القراءة. في هذا المقال سنقدم شرحًا موسعًا ومفصلًا حول كيفية استخدام JSON في JavaScript، مع التركيز على الجوانب العملية، الطرق المختلفة للتعامل معه، وأهميته في بيئات التطوير الحديثة.
ما هو JSON ولماذا نستخدمه؟
JSON هو اختصار لـ “JavaScript Object Notation”، وهو تنسيق نصي خفيف لتبادل البيانات يعتمد بشكل أساسي على بنية الكائنات والمصفوفات في JavaScript. تم تصميم JSON ليكون سهل القراءة والكتابة من قبل البشر، وفي نفس الوقت سهل التحليل والمعالجة من قبل الآلات.
يستخدم JSON في تطبيقات الويب بشكل واسع لنقل البيانات بين الخوادم والمتصفحات، بالإضافة إلى تخزين الإعدادات والبيانات داخل التطبيقات. أهم مميزاته تتلخص في:
-
سهولة الاستخدام والقراءة: يمكن للبشر قراءة ملفات JSON بسهولة بسبب البنية الواضحة والبسيطة.
-
دعم واسع: مدعوم من قبل جميع لغات البرمجة الحديثة وليس JavaScript فقط.
-
فعالية في التخزين والنقل: مقارنة ببعض التنسيقات الأخرى مثل XML، JSON أكثر خفة وأقل تعقيدًا.
البنية الأساسية لـ JSON
يتم التعبير عن البيانات في JSON باستخدام نوعين رئيسيين من الهياكل:
-
الكائنات (Objects): وهي مجموعة من أزواج المفتاح والقيمة، تُكتب بين قوسين معقوفين
{}، والمفتاح يجب أن يكون نصًا (string) محاطًا بعلامات اقتباس مزدوجة.مثال:
json{ "name": "أحمد", "age": 30, "isStudent": false } -
المصفوفات (Arrays): وهي قائمة مرتبة من القيم، تُكتب بين قوسين مربعين
[].مثال:
json["تفاح", "موز", "برتقال"]
يمكن أن تكون القيم داخل JSON من الأنواع التالية: نصوص (strings)، أرقام (numbers)، كائنات (objects)، مصفوفات (arrays)، قيم منطقية (boolean)، أو القيمة null.
تحويل البيانات بين JSON و JavaScript
أحد أهم الاستخدامات لـ JSON في JavaScript هو تحويل البيانات من نص JSON إلى كائن JavaScript يمكن التفاعل معه، والعكس بالعكس.
1. تحويل JSON نصي إلى كائن JavaScript
يتم ذلك باستخدام الدالة JSON.parse()، التي تأخذ نص JSON وتعيد كائن JavaScript.
مثال:
javascriptconst 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().
مثال:
javascriptconst 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
javascriptfetch('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 وتحويله إلى كائن
javascriptconst 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
javascriptconst 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.
مثال:
javascriptconst 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 هو دالة اختيارية تستخدم لتحويل القيم أثناء عملية التحليل.
مثال:
javascriptconst 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 قبل التخزين.
مثال:
javascriptconst 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 تشكل حجر الزاوية في تطوير التطبيقات الحديثة.

