2015-05-06 25 views
1

我试图使用JSON作为我的应用程序的某种数据库。所以用户添加一个输入并将其写入JSON文件,然后当我需要这些信息时,我可以通过JSON进行循环。 我使用'fs'写我对象的内部文件中的JSON格式:根据用户的输入制作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":"[email protected]"} 
{"name":"Peter","email":"[email protected]"} 

这仍然可以,如果我读每一行,并用将其转换为对象,但显然这不是一个有效的JSON文件,它会更好,如果我能有这样的输出:

{ 
{"name":"John","email":"[email protected]"}, 
{"name":"Peter","email":"[email protected]"} 
} 

或电子邮件VEN更好:

[ 
{"name":"John","email":"[email protected]"}, 
{"name":"Peter","email":"[email protected]"} 
] 

因此从技术上讲所有我想要做的就是保持{}和追加我的花括号内的文字。请注意,我无法将所有输入存储在数组/对象中,然后将其写入我的日志文件中。每次用户输入新信息时,我想要一个无外部模块的方法来更新我的log.json文件。

+0

也许解析文件,你会想看看mongodb以及node.js如何执行它? –

+0

你考虑过SQLite吗?它的工作原理与将简单文本文件保存为数据库的相同,并且在运行时速度会更快,而且执行速度更快。 –

+0

你能解释一下最后一段吗?我会采取的方法是每次读取输入文件,将其解析为JSON,将条目推入返回的数组,然后将整个文件写回JSON。很显然,如果文件变大,这不会成为一个好的解决方案。 – GregL

回答

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)); 
     }); 
}); 
0

我肯定会推荐一个数据库。如果你真的想这样做,你可以打开文件,从头开始寻找,直到找到],写下你的新数据,然后再写入]

+0

你没有考虑到逗号。 – GregL

相关问题