مقدمة: ما هو JSON ولماذا هو مطلوب في JavaScript؟
JSON (JavaScript Object Notation) هو تنسيق نصي خفيف لتبادل البيانات، يعتمد على بناء جملة كائنات JavaScript. على الرغم من اسمه، فإن JSON مستقل عن اللغة ومدعوم من قبل جميع لغات البرمجة الحديثة تقريبًا. في بيئة Node.js و JavaScript في المتصفح، يعد العمل مع JSON من أكثر العمليات شيوعًا: من الحصول على البيانات من API إلى حفظ التكوينات ونقل المعلومات بين الخادم والعميل.
في هذه المقالة، سنشرح طريقتين رئيسيتين: JSON.parse() (تحويل سلسلة JSON إلى كائن JavaScript) و JSON.stringify() (تحويل كائن JavaScript إلى سلسلة JSON). ستتعلم كيفية معالجة الأخطاء بشكل صحيح، والعمل مع الهياكل المتداخلة، واستخدام الإمكانيات المتقدمة لهذه الطرق.
1. تحليل JSON: طريقة JSON.parse()
تأخذ طريقة JSON.parse() سلسلة بتنسيق JSON وتحولها إلى كائن أو مصفوفة أو قيمة أولية في JavaScript. هذه هي العملية الأساسية عندما تحصل على بيانات من مصدر خارجي - على سبيل المثال، من REST API أو ملف.
الصيغة الأساسية
const jsonString = '{"name": "آنا", "age": 30, "isStudent": false}';const user = JSON.parse(jsonString);
console.log(user.name); // "آنا"console.log(user.age); // 30console.log(user.isStudent); // falseلاحظ: المفاتيح والقيم النصية في JSON يجب أن تكون محاطة بعلامات اقتباس مزدوجة. استخدام علامات الاقتباس المفردة أو عدم وجود علامات اقتباس للمفاتيح سيؤدي إلى خطأ.
تحليل المصفوفات
يمكن أن يحتوي JSON ليس فقط على كائنات، بل أيضًا على مصفوفات:
const jsonArray = '[1, 2, 3, "أربعة", true]';const arr = JSON.parse(jsonArray);
console.log(arr[0]); // 1console.log(arr[3]); // "أربعة"الهياكل المتداخلة
يدعم JSON التداخل غير المحدود:
const complexJson = '{"users":[{"id":1,"name":"إيفان"},{"id":2,"name":"ماريا"}]}';const data = JSON.parse(complexJson);
console.log(data.users[0].name); // "إيفان"console.log(data.users[1].id); // 2معالجة أخطاء التحليل
إذا كانت السلسلة تحتوي على JSON غير صحيح، فإن JSON.parse() ستلقي استثناء SyntaxError. استخدم دائمًا try/catch عند العمل مع البيانات الخارجية:
const invalidJson = '{"name": "بيتر", age: 25}'; // خطأ: age بدون علامات اقتباس
try { const obj = JSON.parse(invalidJson); console.log(obj);} catch (error) { console.error('خطأ في تحليل JSON:', error.message); // الإخراج: خطأ في تحليل JSON: Unexpected token 'a', ...}الاستخدام المتقدم: دالة reviver
المعامل الثاني لـ JSON.parse() هو دالة reviver، التي تسمح بتحويل القيم أثناء عملية التحليل. على سبيل المثال، يمكن تحويل السلاسل التي تحتوي على تواريخ تلقائيًا إلى كائنات Date:
const jsonWithDate = '{"name": "حدث", "date": "2025-03-15T10:00:00.000Z"}';
const event = JSON.parse(jsonWithDate, (key, value) => { if (key === 'date') { return new Date(value); } return value;});
console.log(event.date instanceof Date); // trueconsole.log(event.date.getFullYear()); // 20252. تسلسل JSON: طريقة JSON.stringify()
تقوم طريقة JSON.stringify() بالعملية العكسية - تحويل كائن أو قيمة JavaScript إلى سلسلة JSON. هذا ضروري لإرسال البيانات إلى الخادم، أو حفظها في ملف، أو تسجيلها.
الصيغة الأساسية
const user = { name: "أولغا", age: 28, isAdmin: true, skills: ["JS", "Python", "SQL"]};
const jsonString = JSON.stringify(user);console.log(jsonString);// {"name":"أولغ