JSON הוא פורמט נתונים נפוץ מאוד, לכן חשוב ללמוד הכל על הפעולות הנפוצות הללו.
אפשר לקרוא ולכתוב קבצי JSON ב-Node.js. כל מה שאתה צריך לעשות הוא להשתמש במודול fs כפי שמפורט במדריך הקל למעקב שלנו.
קריאה וכתיבה של קובצי JSON ב-Node.js
פורמט JavaScript Object Notation, הידוע בכינויו JSON, הוא פורמט קל משקל להעברת נתונים בשימוש נרחב לייצוג נתונים מובנים. זהו פורמט מבוסס טקסט שקל לבני אדם לקרוא ולכתוב ולמכונות לנתח וליצור.
היכולת לקרוא ולכתוב באופן פרוגרמטי קובצי JSON ב-Node.js מאפשרת לך לאחסן, להחליף ולתפעל נתונים מובנים ביעילות ובקלות. למד כיצד לקרוא, לכתוב ולעדכן קובצי JSON באמצעות מודול מערכת הקבצים Node.js.
מודול מערכת הקבצים Node.js
מערכת הקבצים Node.js (fs) מודול מובנה ב-Node.js. זה מאפשר לך ליצור אינטראקציה עם מערכת הקבצים במכשיר שלך. אתה יכול להשתמש בו כדי לקרוא את התוכן של קובץ, ליצור קובץ חדש ולמחוק קובץ, בין היתר.
השיטות הניתנות על ידי ה fs מודול יכול להיות סינכרוני או אסינכרוני. שיטות סינכרוניות חוסמות את ביצוע התוכנית שלך עד להשלמת פעולת מערכת הקבצים. לשיטות אלו יש בדרך כלל "סנכרון" בסוף השמות שלהן. לדוגמה, readFileSync אוֹ writeFileSync.
מצד שני, שיטות אסינכרוניות אינן חוסמות את ביצוע התוכנית שלך ומאפשרות לה להמשיך ולעבד משימות אחרות בזמן ביצוע פעולת מערכת הקבצים. שיטות אלה מקבלות פונקציית התקשרות חוזרת שתפעל כאשר הפעולה תושלם. לדוגמה, readFile אוֹ writeFile.
בעת אינטראקציה עם מערכת הקבצים, עליך להשתמש תמיד בשיטות אסינכרוניות כדי לשמור על האופי הבלתי-חוסם של לולאת האירועים ולשפר את הביצועים וההיענות של היישום שלך.
עם זאת, לשיטות סינכרוניות יש את מקומן בתרחישים מסוימים, במיוחד כאשר אתה כותב סקריפטים פשוטים או מתמודד עם פעולות קבצים חד פעמיות.
קריאת קבצי JSON עם מודול fs
כדי לקרוא קובץ JSON, תחילה ייבא את האסינכרוני fs מודול לתוך הקובץ הראשי שלך. ככה:
const fs = require("node: fs/promises");
אם אתה משתמש בגרסה נמוכה מ- Node.js v18, לייבא את fs מודול כזה:
const fs = require("fs/promises");
אם ברצונך לייבא את כל המודול (סינכרוני ואסינכרוני), הסר את ה /promises.
אתה יכול לקרוא קובץ JSON באמצעות ה readFile שיטה שלוקחת שני ארגומנטים: נתיב קובץ ואובייקט תצורה אופציונלי. הארגומנט config מציין אפשרויות לקריאת הקובץ ויכול להיות אובייקט עם אפשרויות או קידוד מחרוזת.
אפשרויות האובייקט כוללות:
- הַצפָּנָה (חוּט, ברירת המחדל היא "utf8"): אפשרות זו מציינת את קידוד התווים לשימוש בעת קריאת הקובץ. קידודים נפוצים כוללים "utf8" עבור קבצי טקסט ו"בינארי" עבור קבצים בינאריים.
- דֶגֶל (חוּט, ברירת המחדל היא "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 שיטה. שיטה זו לוקחת שלושה טיעונים:
- נתיב קובץ.
- הנתונים שברצונך לכתוב לקובץ, שיכולים להיות מחרוזת, מאגר, an ניתן לסנכרון, או אובייקט שניתן לחזור עליו.
- אובייקט תצורה אופציונלי.
שיטה זו כותבת נתונים לקובץ באופן אסינכרוני. אם הקובץ קיים, הוא מחליף את התוכן הקיים בתוכן החדש. אם הקובץ לא קיים, הוא יוצר אותו ומאכלס אותו בנתונים שאתה מעביר כארגומנט.
לדוגמה:
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
ה fs המודול אינו מספק דרך מפורשת לעדכן קבצים, מכיוון שכתיבת קובץ מחליפה נתונים קיימים.
כדי לעקוף זאת, אתה יכול לעדכן קובץ על ידי קבלת תחילה את התוכן הקיים מהקובץ באמצעות readFile שיטה. לאחר מכן, תוכל להוסיף את הנתונים הקיימים לנתונים הנוכחיים שלך ולהעביר אותם כארגומנט הנתונים שלך ב- 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 כדי להבטיח שהם תואמים את הציפיות שלך. עליך גם להגביל את הרשאות הגישה לקבצים ולחטא את קלט המשתמש כדי לסכל פגיעויות אפשריות כמו הזרקת קוד.