JSON yra labai paplitęs duomenų formatas, todėl svarbu viską sužinoti apie šias įprastas operacijas.

Galima skaityti ir rašyti JSON failus Node.js. Viskas, ką jums reikia padaryti, tai naudoti fs modulį, kaip aprašyta mūsų lengvai sekančiame vadove.

JSON failų skaitymas ir rašymas Node.js

„JavaScript“ objektų žymėjimo formatas, populiariai žinomas kaip JSON, yra lengvas duomenų perdavimo formatas, plačiai naudojamas struktūriniams duomenims pateikti. Tai teksto formatas, kurį lengva skaityti ir rašyti žmonėms, o mašinoms – analizuoti ir generuoti.

Galimybė programiškai skaityti ir rašyti JSON failus Node.js leidžia efektyviai ir lengvai saugoti, keistis ir manipuliuoti struktūriniais duomenimis. Sužinokite, kaip skaityti, rašyti ir atnaujinti JSON failus naudodami failų sistemos modulį Node.js.

Failų sistemos modulis Node.js

Node.js failų sistema (fs) modulis yra integruotas į Node.js. Tai leidžia sąveikauti su įrenginio failų sistema. Galite naudoti jį norėdami skaityti failo turinį, sukurti naują failą ir ištrinti failą, be kita ko.

instagram viewer

Pateikti metodai fs modulis gali būti bet kuris sinchroninis arba asinchroninis. Sinchroniniai metodai blokuoja jūsų programos vykdymą, kol baigsis failų sistemos veikimas. Šių metodų pavadinimų pabaigoje paprastai yra „Sync“. Pavyzdžiui, skaitykite failų sinchronizavimą arba writeFileSync.

Kita vertus, asinchroniniai metodai neblokuoja jūsų programos vykdymo ir leidžia jai toliau apdoroti kitas užduotis, kol vykdoma failų sistemos operacija. Šie metodai priima atgalinio skambinimo funkciją, kuri bus paleista, kai operacija bus baigta. Pavyzdžiui, skaityti failą arba rašyti failą.

Sąveikaujant su failų sistema visada turėtumėte naudoti asinchroninius metodus, kad išlaikytumėte neblokuojantį įvykio ciklo pobūdį ir pagerintumėte programos našumą bei reagavimą.

Tačiau sinchroniniai metodai turi savo vietą tam tikruose scenarijuose, ypač kai rašote paprastus scenarijus arba dirbate su vienkartinėmis failų operacijomis.

JSON failų skaitymas naudojant fs modulį

Norėdami skaityti JSON failą, pirmiausia importuokite asinchroninį failą fs modulį į pagrindinį failą. Kaip taip:

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

Jei naudojate senesnę versiją nei Node.js v18, importuoti fs toks modulis:

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

Jei norite importuoti visą modulį (sinchroninį ir asinchroninį), pašalinkite /promises.

JSON failą galite skaityti naudodami skaityti failą metodas, kuriam naudojami du argumentai: failo kelias ir pasirenkamas konfigūracijos objektas. Konfigūracijos argumentas nurodo failo skaitymo parinktis ir gali būti objektas su parinktimis arba eilutės kodavimas.

Objekto parinktys apima:

  • kodavimas (styga, numatytasis nustatymas yra "utf8"): Ši parinktis nurodo simbolių kodavimą, kuris bus naudojamas skaitant failą. Įprastos koduotės apima „utf8“ tekstiniams failams ir „binary“ dvejetainiams failams.
  • vėliava (styga, numatytoji yra "r"): Ši parinktis nurodo failų sistemos vėliavėlę, naudojamą atidarant failą. Įprastos vėliavėlės apima „r“ skaitymui ir „w“ rašymui.

Pavyzdžiui:

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);
});

Šis kodas nuskaito JSON failą, vadinamą users.json dabartiniame kataloge. Kai nuskaitote failo duomenis, galite jį išanalizuoti iš JSON į „JavaScript“ objektą naudodami JSON.parse. Tai leidžia pasiekti duomenis ir juos valdyti kaip objektą kode.

Mažiems JSON failams galite naudoti reikalauti skaityti juos sinchroniškai. Šis metodas automatiškai analizuoja JSON failus į „JavaScript“ objektus. Jei norite didesnių JSON failų ir neblokuojančių scenarijų, naudokite fs.readFile skaityti juos asinchroniškai. Be to, naudojant reikalauti taip pat išsaugo failo turinį atmintyje, todėl gali būti netinkama, jei JSON failas labai pasikeičia.

JSON failų rašymas naudojant fs modulį

Galite įrašyti duomenis į JSON failus naudodami rašyti failą metodas. Šis metodas apima tris argumentus:

  • Failo kelias.
  • Duomenys, kuriuos norite įrašyti į failą, kurie gali būti eilutė, buferis, an AsyncIterable, arba Iteruojamas objektas.
  • Neprivalomas konfigūracijos objektas.

Šis metodas asinchroniškai įrašo duomenis į failą. Jei failas egzistuoja, jis perrašo esamą turinį nauju. Jei failo nėra, jis sukuria jį ir užpildo duomenis, kuriuos perduodate kaip argumentą.

Pavyzdžiui:

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);
});

Duomenys, kuriuos perduodate į funkciją writeFile, turi būti eilutė arba buferis, taigi, jei norite įrašyti objektą į failą, pirmiausia turite jį konvertuoti į eilutę naudodami JSON.stringify metodas.

JSON failų atnaujinimas naudojant fs modulį

The fs modulis nepateikia aiškaus būdo atnaujinti failus, nes failo rašymas perrašo visus esamus duomenis.

Norėdami tai išspręsti, galite atnaujinti failą, pirmiausia gaudami esamą turinį iš failo naudodami skaityti failą metodas. Tada galite pridėti esamus duomenis prie dabartinių duomenų ir perduoti juos kaip duomenų argumentą rašyti failą metodas.

Štai funkcija, kuri įgyvendina aukščiau pateiktą logiką:

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);
}
};

Galite iškviesti funkciją taip:

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);
});

Šis kodo blokas pridės vartotojus su aukščiau pateikta informacija prie esamos users.json failą.

Saugos klausimai skaitant ir rašant JSON failus

Norint apsaugoti Node.js programą, kai skaitote ir rašote JSON failus, reikia atsižvelgti į esminius saugumo aspektus. Visada turėtumėte patvirtinti JSON duomenis, kad įsitikintumėte, jog jie atitinka jūsų lūkesčius. Taip pat turėtumėte apriboti prieigos prie failų leidimus ir išvalyti vartotojo įvestį, kad išvengtumėte galimų spragų, pvz., kodo įvedimo.