JSON في Node.js: دليل شامل لمعالجة البيانات
JSON (JavaScript Object Notation) هو تنسيق خفيف لتبادل البيانات أصبح المعيار الفعلي لواجهات برمجة تطبيقات الويب وملفات التكوين وتخزين المعلومات المنظمة. في بيئة Node.js، يعد العمل مع JSON جزءًا لا يتجزأ من أي تطبيق تقريبًا. في هذه المقالة، سنستعرض بالتفصيل جميع جوانب معالجة JSON: من التحليل الأساسي إلى المعالجة المتقدمة بالتيارات.
1. الأساسيات: التحليل والتسلسل
في Node.js، يتم استخدام طريقتين عامتين للعمل مع JSON: JSON.parse() و JSON.stringify(). وهما متاحتان دون الحاجة إلى استيراد وحدات إضافية.
JSON.parse() — تحويل سلسلة نصية إلى كائن
تأخذ طريقة JSON.parse() سلسلة JSON وتعيد كائن JavaScript المقابل. من المهم أن تكون السلسلة JSON صالحة بشكل صارم.
const jsonString = '{"name": "Alice", "age": 30, "isAdmin": false}';const user = JSON.parse(jsonString);console.log(user.name); // Aliceconsole.log(typeof user); // objectتدعم الطريقة أيضًا وسيطًا ثانيًا — دالة "reviver"، والتي تسمح بتحويل القيم أثناء عملية التحليل:
const data = '{"date": "2025-01-15T10:00:00Z"}';const parsed = JSON.parse(data, (key, value) => { if (key === 'date') return new Date(value); return value;});console.log(parsed.date instanceof Date); // trueJSON.stringify() — تحويل كائن إلى سلسلة نصية
تقوم طريقة JSON.stringify() بالتحويل العكسي — تحول كائن JavaScript إلى سلسلة JSON.
const user = { name: 'Bob', age: 25, hobbies: ['coding', 'reading']};const json = JSON.stringify(user);console.log(json); // {"name":"Bob","age":25,"hobbies":["coding","reading"]}تأخذ الطريقة ثلاث وسائط: القيمة، دالة الاستبدال (replacer) وعدد المسافات للتنسيق (space):
const obj = { a: 1, b: 2, c: 3 };// إخراج منسق مع مسافات بادئةconsole.log(JSON.stringify(obj, null, 2));// {// "a": 1,// "b": 2,// "c": 3// }
// تصفية المفاتيح باستخدام replacerconst filtered = JSON.stringify(obj, ['a', 'c'], 2);console.log(filtered);// {// "a": 1,// "c": 3// }2. قراءة وكتابة ملفات JSON
في التطبيقات الواقعية، غالبًا ما يتم تخزين بيانات JSON في ملفات. للعمل مع نظام الملفات، يتم استخدام الوحدة المدمجة fs.
القراءة والكتابة المتزامنة
const fs = require('fs');const path = require('path');
const filePath = path.join(__dirname, 'config.json');
// قراءةconst rawData = fs.readFileSync(filePath, 'utf-8');const config = JSON.parse(rawData);console.log(config.port);
// كتابةconst newConfig = { port: 3000, host: 'localhost' };fs.writeFileSync(filePath, JSON.stringify(newConfig, null, 2));القراءة والكتابة غير المتزامنة (الطريقة الموصى بها)
const fs = require('fs').promises;
async function readConfig() { try { const data = await fs.readFile('config.json', 'utf-8'); return JSON.parse(data); } catch (err) { console.error('خطأ في قراءة الملف:', err); throw err; }}
async function writeConfig(config) { await fs.writeFile('config.json', JSON.stringify(config, null, 2));}
// الاستخدام(async () => { const config = await readConfig(); config.port = 4000; await writeConfig(config);})();3. التحقق من صحة JSON
في بعض الأحيان، من الضروري التحقق مما إذا كانت السلسلة النصية هي JSON صالحة دون إثارة استثناء. الطريقة الأكثر موثوقية هي تغليف JSON.parse() في try-catch:
أيضاً في المكتبة
توصيات