مقدمة في JSON وJavaScript
\nJSON (JavaScript Object Notation) هو تنسيق خفيف لتبادل البيانات أصبح معيارًا للتفاعل بين العميل والخادم في تطبيقات الويب. بفضل بساطته وسهولة قراءته، يُستخدم JSON في كل مكان: من ملفات التكوين إلى استعلامات API. في هذه المقالة، سنشرح كيفية العمل مع JSON في بيئة Node.js، ونتقن التحليل (تحويل سلسلة نصية إلى كائن) والتسلسل (تحويل كائن إلى سلسلة نصية). المادة موجهة للمطورين المبتدئين الذين لديهم معرفة أساسية بـ JavaScript.
\n\nما هو JSON ولماذا نحتاجه؟
\nJSON هو تنسيق نصي يعتمد على بناء جملة كائنات JavaScript. ومع ذلك، JSON هو مجرد سلسلة نصية يمكن نقلها عبر الشبكة أو تخزينها في ملف. أنواع البيانات الأساسية في JSON:
\n- \n
- سلاسل نصية (بعلامات اقتباس مزدوجة) \n
- أرقام (صحيحة وعائمة) \n
- قيم منطقية (true/false) \n
- null \n
- مصفوفات \n
- كائنات (مفاتيح بعلامات اقتباس مزدوجة) \n
مثال على سلسلة JSON صالحة:
\n{\n "name": "آنا",\n "age": 28,\n "isStudent": false,\n "skills": ["JavaScript", "Node.js"],\n "address": null\n}\nعلى عكس كائن JavaScript العادي، يتطلب JSON بناء جملة صارمًا: جميع المفاتيح والقيم النصية تُحاط بعلامات اقتباس مزدوجة، والتعليقات محظورة.
\n\nتحليل JSON: JSON.parse()
\nلتحويل سلسلة JSON إلى كائن JavaScript، يُستخدم الأسلوب JSON.parse(). هذا ضروري عند استلام بيانات من الخادم، أو قراءة ملف، أو معالجة إدخال المستخدم.
مثال أساسي للتحليل
\nconst jsonString = '{"name": "إيفان", "age": 30}';\nconst user = JSON.parse(jsonString);\nconsole.log(user.name); // إيفان\nconsole.log(user.age); // 30\n\nتحليل مصفوفة
\nconst jsonArray = '[1, 2, "ثلاثة", true]';\nconst arr = JSON.parse(jsonArray);\nconsole.log(arr[2]); // ثلاثة\n\nمعالجة أخطاء التحليل
\nJSON غير صالح سيؤدي إلى استثناء SyntaxError. استخدم دائمًا try...catch عند العمل مع بيانات غير موثوقة:
try {\n const invalid = '{"name": "خطأ}';\n const result = JSON.parse(invalid);\n} catch (error) {\n console.error('خطأ في التحليل:', error.message);\n}\nيمكنك أيضًا تمرير وسيطة ثانية — دالة reviver، التي تسمح بتحويل القيم أثناء عملية التحليل:
const json = '{"date": "2024-01-15", "count": "42"}';\nconst obj = JSON.parse(json, (key, value) => {\n if (key === 'date') return new Date(value);\n if (key === 'count') return Number(value);\n return value;\n});\nconsole.log(obj.date.getFullYear()); // 2024\nconsole.log(typeof obj.count); // number\n\nتسلسل JSON: JSON.stringify()
\nالعملية العكسية — تحويل كائن JavaScript إلى سلسلة JSON — تتم باستخدام JSON.stringify(). هذا ضروري لإرسال البيانات إلى الخادم، أو حفظها في ملف، أو تسجيلها.
مثال بسيط للتسلسل
\nconst user = {\n name: 'ماريا',\n age: 25,\n isAdmin: true\n};\nconst json = JSON.stringify(user);\nconsole.log(json);\n// {"name":"ماريا","age":25,"isAdmin":true}\n\nتنسيق الإخراج
\nيقبل الأسلوب ثلاث معاملات: القيمة، دالة استبدال (أو مصفوفة من الحقول)، وعدد المسافات للمسافات البادئة:
\nconst data = {\n id: 1,\n title: 'مقالة',\n tags: ['js', 'json']\n};\n// مع مسافات بادئة مقدارها مسافتان\nconst prettyJson = JSON.stringify(data, null, 2);\nconsole.log(prettyJson);\n/* الإخراج:\n{\n "id": 1,\n "title": "مقالة",\n "tags": [\n "js",\n "json"\n ]\n}\n*/\n\nتصفية الحقول
\nالمعامل الثاني يمكن أن يكون مصفوفة من المفاتيح التي يجب تضمينها في النتيجة:
\nconst user = {\n name: 'بيتر',\n password: 'secret12