var FileHasher = require("./FileHasher");
if (process.argv.length < 3) {
console.log("Program file and one argument are required for this program.");
process.exit(1);
}
var filename = process.argv[2];
var fs = require('fs');
var file = fs.readFileSync(filename, "UTF-8"); // get file contents
var data = fs.readFileSync("../sha1.txt", "UTF-8"); // read current key-value pairs
console.log(data); // print all current key-value pairs
var filesha1 = FileHasher(file);
console.log(filesha1);
var object = {
name: filename,
value: filesha1
};
console.log(object);
fs.appendFile("../sha1.txt", JSON.stringify(object), function(err) {
console.log(err);
console.log(object); // prints object so I know it was stored correctly
});
现在一切正常。但是,将对象保存到文本文件时,而不是获取此格式:
{
"name":"sha1.js",
"value":"6d358b6f267e22e327c1028e79a5c8b200bf453d"
};
我明白了:
{"name":"sha1.js","value":"6d358b6f267e22e327c1028e79a5c8b200bf453d"}
我想更改间距并在保存对象时添加分号。在将来,我还计划解析此列表以检查文件是否已存在,并在文件的sha1中更新更新值的值。我会非常感谢能够以正确的方式设计我的代码或对象,或者可能是我应该使用的不同功能的指导手!
答案 0 :(得分:2)
这两个东西是相同的,在解析时,忽略分号。分号在JSON对象之后无效,因此您应该在记录之间使用分号(如果有的话,逗号会更合适)。
现在,the JSON.stringify
function有一些鲜为人知的参数控制空白和其他漂亮的打印功能。看起来你想要JS标准的双空缩进,这就像JSON.stringify(object, null, ' ')
这样的调用。
要添加分号 - 你真的不应该这样做 - 你可以简单地使用字符串连接:
fs.appendFile("../sha1.txt", JSON.stringify(object) + ';\n', function(err) {
这将在JSON字符串后面添加分号和换行符。由于序列化后添加了分号,因此无论行数如何,它都将出现在消息的末尾。