如何更新json文件中的值并通过node.js保存? 我有文件内容:
var file_content = fs.readFileSync(filename);
var content = JSON.parse(file_content);
var val1 = content.val1;
现在我想更改val1
的值并将其保存到文件中。
答案 0 :(得分:84)
异步执行此操作非常简单。如果你担心阻塞线程(可能),它会特别有用。
var fs = require('fs');
var fileName = './file.json';
var file = require(fileName);
file.key = "new value";
fs.writeFile(fileName, JSON.stringify(file), function (err) {
if (err) return console.log(err);
console.log(JSON.stringify(file));
console.log('writing to ' + fileName);
});
需要注意的是,json是在一行上写入文件而不是美化。例如:
{
"key": "value"
}
将......
{"key": "value"}
要避免这种情况,只需将这两个额外的参数添加到JSON.stringify
JSON.stringify(file, null, 2)
null
- 表示替换函数。 (在这种情况下,我们不想改变过程)
2
- 表示要缩进的空格。
答案 1 :(得分:37)
//change the value in the in-memory object
content.val1 = 42;
//Serialize as JSON and Write it to a file
fs.writeFileSync(filename, JSON.stringify(content));
答案 2 :(得分:3)
在上一个答案中添加用于写操作的文件路径目录
fs.writeFile(path.join(__dirname,jsonPath), JSON.stringify(newFileData), function (err) {}
答案 3 :(得分:1)
// 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));
答案 4 :(得分:0)
对于那些希望将项目添加到json集合的人
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));
}
}
答案 5 :(得分:0)
我强烈建议您不要使用they hold other concurrent operations之类的同步(阻塞)功能。相反,请使用异步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))
请记住,setValue
返回一个未完成的承诺,您将需要使用.then function,或者在异步功能中使用await operator。
// 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
答案 6 :(得分:0)
任务完成后保存数据
Use-Procedure
Before-Page=DoThisProcAfterNewPage
After-Page=DoThisProcBeforeNewPage