JSON هو تنسيق بيانات شائع جدًا، لذا من المهم معرفة كل شيء عن هذه العمليات الشائعة.

من الممكن قراءة وكتابة ملفات JSON في Node.js. كل ما عليك فعله هو استخدام وحدة fs كما هو مفصل في دليلنا سهل المتابعة.

قراءة وكتابة ملفات JSON في Node.js

يعد تنسيق JavaScript Object Notation، المعروف باسم JSON، تنسيقًا خفيف الوزن لنقل البيانات يستخدم على نطاق واسع لتمثيل البيانات المنظمة. إنه تنسيق قائم على النص يسهل على البشر قراءته وكتابته وعلى الآلات تحليله وإنشاءه.

تتيح لك القدرة على قراءة ملفات JSON وكتابتها برمجيًا في Node.js تخزين البيانات المنظمة وتبادلها ومعالجتها بكفاءة وسهولة. تعرف على كيفية قراءة ملفات JSON وكتابتها وتحديثها باستخدام وحدة نظام الملفات Node.js.

وحدة نظام الملفات Node.js

نظام الملفات Node.js (خ) الوحدة مدمجة في Node.js. يتيح لك التفاعل مع نظام الملفات على جهازك. يمكنك استخدامه لقراءة محتويات ملف، وإنشاء ملف جديد، وحذف ملف، من بين أشياء أخرى.

الأساليب التي تقدمها خ يمكن أن تكون الوحدة إما متزامن أو غير متزامن. تمنع الطرق المتزامنة تنفيذ البرنامج حتى اكتمال تشغيل نظام الملفات. عادةً ما تحتوي هذه الطرق على كلمة "Sync" في نهاية أسمائها. على سبيل المثال، readFileSync أو writeFileSync.

instagram viewer

من ناحية أخرى، لا تمنع الطرق غير المتزامنة تنفيذ برنامجك وتسمح له بمواصلة معالجة المهام الأخرى أثناء تنفيذ عملية نظام الملفات. تقبل هذه الطرق وظيفة رد الاتصال التي سيتم تشغيلها عند اكتمال العملية. على سبيل المثال، إقرا الملف أو writeFile.

عند التفاعل مع نظام الملفات، يجب عليك دائمًا استخدام الأساليب غير المتزامنة للحفاظ على الطبيعة غير المحظورة لحلقة الأحداث وتحسين أداء التطبيق واستجابته.

ومع ذلك، فإن الأساليب المتزامنة لها مكانها في سيناريوهات معينة، خاصة عند كتابة برامج نصية بسيطة أو التعامل مع عمليات ملف لمرة واحدة.

قراءة ملفات JSON باستخدام الوحدة النمطية fs

لقراءة ملف JSON، قم أولاً باستيراد الملف غير المتزامن خ الوحدة النمطية في الملف الرئيسي الخاص بك. مثل ذلك:

const fs = require("node: fs/promises");

إذا كنت تستخدم إصدارًا أقل من Node.js v18، استيراد خ وحدة مثل هذا:

const fs = require("fs/promises");

إذا كنت تريد استيراد الوحدة بأكملها (متزامنة وغير متزامنة)، فقم بإزالة ملف /promises.

يمكنك قراءة ملف JSON باستخدام الملف إقرا الملف الطريقة التي تأخذ وسيطتين: مسار الملف وكائن التكوين الاختياري. تحدد وسيطة التكوين خيارات قراءة الملف ويمكن أن تكون كائنًا به خيارات أو ترميز سلسلة.

تتضمن خيارات الكائن ما يلي:

  • التشفير (خيط، الافتراضي هو "utf8"): يحدد هذا الخيار ترميز الأحرف الذي سيتم استخدامه عند قراءة الملف. تتضمن الترميزات الشائعة "utf8" للملفات النصية و"binary" للملفات الثنائية.
  • علَم (خيط، الافتراضي هو "r"): يحدد هذا الخيار علامة نظام الملفات المستخدمة عند فتح الملف. تتضمن العلامات الشائعة "r" للقراءة و"w" للكتابة.

على سبيل المثال:

fs.readFile("./users.json", { encoding: "utf-8", flag: "r" })
.then((data) => {
const users = JSON.parse(data);
console.log(users);
})
.catch((error) => {
console.error('Error reading the JSON file:', error);
});

يقرأ هذا الرمز ملف JSON يسمى users.json في الدليل الحالي. عند استرداد بيانات الملف، يمكنك تحليلها من JSON إلى كائن JavaScript باستخدام JSON.parse. يتيح لك ذلك الوصول إلى البيانات ومعالجتها ككائن في التعليمات البرمجية الخاصة بك.

بالنسبة لملفات JSON الصغيرة، يمكنك استخدام يتطلب لقراءتها بشكل متزامن. تقوم هذه الطريقة تلقائيًا بتحليل ملفات JSON إلى كائنات JavaScript. بالنسبة لملفات JSON الأكبر حجمًا وفي السيناريوهات غير المحظورة، استخدم fs.readFile لقراءتها بشكل غير متزامن. بالإضافة إلى ذلك، باستخدام يتطلب يقوم أيضًا بتخزين محتويات الملف مؤقتًا في الذاكرة، لذلك قد لا يكون الأمر مثاليًا إذا تغير ملف JSON الخاص بك كثيرًا.

كتابة ملفات JSON باستخدام الوحدة النمطية fs

يمكنك كتابة البيانات إلى ملفات JSON باستخدام الملف writeFile طريقة. تأخذ هذه الطريقة ثلاث وسيطات:

  • مسار الملف.
  • البيانات التي تريد كتابتها في الملف، والتي يمكن أن تكون سلسلة أو مخزنًا مؤقتًا أو ملفًا غير قابل للتكرار، أو كائن قابل للتكرار.
  • كائن تكوين اختياري.

تقوم هذه الطريقة بكتابة البيانات بشكل غير متزامن إلى ملف. إذا كان الملف موجودًا، فإنه يقوم باستبدال المحتوى الموجود بالمحتوى الجديد. إذا لم يكن الملف موجودًا، فإنه يقوم بإنشائه وملؤه بالبيانات التي تمررها كوسيطة.

على سبيل المثال:

const fakeUsers = [
{
id: 1,
name: "John Doe",
username: "johndoe123",
address: {
street: "123 Main St",
city: "Anytown",
},
},
{
id: 2,
name: "Jane Smith",
username: "janesmith456",
address: {
street: "456 Elm St",
city: "Another City",
},
}
];

fs.writeFile("./users.json", JSON.stringify(fakeUsers), {
encoding: "utf-8",
flag: "w",
}).catch((error) => {
console.error('Error writing the JSON file:', error);
});

يجب أن تكون البيانات التي تمررها إلى وظيفة writeFile عبارة عن سلسلة أو مخزن مؤقت، لذا إذا كنت تريد كتابة كائن إلى الملف، فيجب عليك أولاً تحويله إلى سلسلة باستخدام الأمر JSON.stringify طريقة.

تحديث ملفات JSON باستخدام الوحدة النمطية fs

ال خ لا توفر الوحدة طريقة واضحة لتحديث الملفات، حيث أن كتابة الملف تؤدي إلى الكتابة فوق أي بيانات موجودة.

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

إليك وظيفة تنفذ المنطق أعلاه:

const updateFile = async (filePath, data) => {
try {
const fileContents = await fs.readFile(filePath, {
encoding: "utf-8",
flag: "r",
});

const fileData = JSON.parse(fileContents);

const updatedFileData = [...fileData, ...data];

await fs.writeFile(filePath, JSON.stringify(updatedFileData), {
encoding: "utf-8",
flag: "w",
});

return"File updated successfully";
} catch (error) {
console.error('Error updating the JSON file:', error);
}
};

يمكنك استدعاء الوظيفة مثل هذا:

updateFile("./users.json", [
{
id: 4,
name: "Jane Doe",
username: "janedoe123",
address: {
street: "123 Main St",
city: "Anytown",
},
},
{
id: 5,
name: "John Smith",
username: "johnsmith456",
address: {
street: "456 Elm St",
city: "Another City",
},
}
]).then((message) => {
console.log(message);
});

ستضيف كتلة التعليمات البرمجية هذه المستخدمين الذين لديهم المعلومات المذكورة أعلاه إلى القائمة users.json ملف.

الاعتبارات الأمنية لقراءة وكتابة ملفات JSON

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