Dies asynchron zu machen ist ziemlich einfach. Dies ist besonders nützlich, wenn Sie (wahrscheinlich) den Thread blockieren möchten.
const fs = require('fs');
const fileName = './file.json';
const file = require(fileName);
file.key = "new value";
fs.writeFile(fileName, JSON.stringify(file), function writeJSON(err) {
if (err) return console.log(err);
console.log(JSON.stringify(file));
console.log('writing to ' + fileName);
});
Die Einschränkung ist, dass json in einer Zeile in die Datei geschrieben und nicht verschönert wird. Ex:
{
"key": "value"
}
wird sein...
{"key": "value"}
Um dies zu vermeiden, fügen Sie einfach diese beiden zusätzlichen Argumente hinzu JSON.stringify
JSON.stringify(file, null, 2)
null
- repräsentiert die Ersatzfunktion. (In diesem Fall möchten wir den Prozess nicht ändern.)
2
- repräsentiert die einzurückenden Leerzeichen.
Fügen Sie zusätzlich zur vorherigen Antwort das Dateipfadverzeichnis für den Schreibvorgang hinzu
fs.writeFile(path.join(__dirname,jsonPath), JSON.stringify(newFileData), function (err) {}
quelle
// read file and make object let content = JSON.parse(fs.readFileSync('file.json', 'utf8')); // edit or add property content.expiry_date = 999999999999; //write file fs.writeFileSync('file.json', JSON.stringify(content));
quelle
Für diejenigen, die einen Artikel zu einer JSON-Sammlung hinzufügen möchten
function save(item, path = './collection.json'){ if (!fs.existsSync(path)) { fs.writeFile(path, JSON.stringify([item])); } else { var data = fs.readFileSync(path, 'utf8'); var list = (data.length) ? JSON.parse(data): []; if (list instanceof Array) list.push(item) else list = [item] fs.writeFileSync(path, JSON.stringify(list)); } }
quelle
Ich würde dringend empfehlen, keine synchronen (blockierenden) Funktionen zu verwenden, da diese andere gleichzeitige Operationen enthalten . Verwenden Sie stattdessen asynchrone fs.promises :
const fs = require('fs').promises const setValue = (fn, value) => fs.readFile(fn) .then(body => JSON.parse(body)) .then(json => { // manipulate your data here json.value = value return json }) .then(json => JSON.stringify(json)) .then(body => fs.writeFile(fn, body)) .catch(error => console.warn(error))
Wenn Sie
setValue
ein ausstehendes Versprechen zurückgeben, müssen Sie die Funktion .then oder in asynchronen Funktionen den Operator await verwenden .// await operator await setValue('temp.json', 1) // save "value": 1 await setValue('temp.json', 2) // then "value": 2 await setValue('temp.json', 3) // then "value": 3 // then-sequence setValue('temp.json', 1) // save "value": 1 .then(() => setValue('temp.json', 2)) // then save "value": 2 .then(() => setValue('temp.json', 3)) // then save "value": 3
quelle