从用户的输入

时间:2015-05-06 01:48:59

标签: javascript json node.js

我试图将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文件。

2 个答案:

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