我试图将JSON
用作我的应用程序的某种数据库。因此,用户添加了一个输入并将其写入JSON文件,然后当我需要该信息时,我可以遍历JSON。
我使用'fs'
在文件中编写我的对象的JSON格式:
fs.appendFile('log.json', JSON.stringify(customer) + '\n' , function(err) {
if (err) {
return console.log(err);
}
console.log('saved in log.json');
});
所以我的log.json
看起来像这样:
{"name":"John","email":"john@gmail.com"}
{"name":"Peter","email":"Peter@gmail.com"}
如果我读取每一行并将其转换为对象,这仍然可以使用,但显然它不是有效的JSON
文件,如果我可以将其作为输出:
{
{"name":"John","email":"john@gmail.com"},
{"name":"Peter","email":"Peter@gmail.com"}
}
甚至更好:
[
{"name":"John","email":"john@gmail.com"},
{"name":"Peter","email":"Peter@gmail.com"}
]
所以从技术上讲,我想做的就是保持{}
并将我的文字附加到花括号中。请注意,我无法将所有输入存储在数组/对象中,然后将其写入我的日志文件中。我想要一个无外部模块的方法来在每次用户输入新信息时更新我的log.json
文件。
答案 0 :(得分:0)
我肯定会推荐一个数据库。如果你真的想这样做,你可以打开文件,从结尾向后搜索,直到找到]
,写下你的新数据,然后再写]
。
答案 1 :(得分:0)
我提出了这个解决方案,使用正则表达式替换每个新条目的结束括号:
if (data.length < 5) {
console.log(data.length);
new_json = JSON.stringify(customer) + '\n' + ']';
result = data.replace(/\]$/g, new_json);
} else {
new_json = ',' + JSON.stringify(customer) + '\n' + ']';
result = data.replace(/\]$/g, new_json);
}
然后您可以使用JSON.parse
fs.writeFile('log.json', result, 'utf8', function(err) {
if (err) throw err;
fs.readFile('log.json', 'utf8', function (err, data) {
if (err) throw err;
console.log(JSON.parse(data));
});
});