//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));
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));
}
}
8条答案
按热度按时间utugiqy61#
异步执行此操作非常简单。如果您担心阻塞线程(可能),则此操作特别有用。否则,我建议使用里昂的答案
需要注意的是,json只写在文件的一行上,而不是美化。例如:
将会是...
要避免这种情况,只需将这两个额外的参数添加到
JSON.stringify
null
-表示替换函数。(在这种情况下,我们不想改变过程)2
-表示要缩进的空格。y53ybaqx2#
w8biq8rn3#
r1wp621o4#
在上一个答案的基础上添加写入操作的add file path目录
rks48beu5#
我强烈建议不要使用同步(阻塞)函数,因为它们会占用其他并发操作,而应该使用异步fs。
请记住
setValue
返回一个待定的承诺,您需要使用.then function,或者在异步函数中使用await operator。nhaq1z216#
对于希望向json集合添加项的用户
fruv7luv7#
任务完成后保存数据
jw5wzhpr8#
基于承诺的解决方案[Javascript**(ES6)+ Node.js(V10或更高版本)**]
如果您的项目支持JavascriptES 8,那么您可以使用asyn/await代替原生promise。