我在将一个键值对象存储在日志文件中时遇到了麻烦

时间:2015-07-13 15:20:14

标签: javascript node.js append

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中更新更新值的值。我会非常感谢能够以正确的方式设计我的代码或对象,或者可能是我应该使用的不同功能的指导手!

1 个答案:

答案 0 :(得分:2)

这两个东西是相同的,在解析时,忽略分号。分号在JSON对象之后无效,因此您应该在记录之间使用分号(如果有的话,逗号会更合适)。

现在,the JSON.stringify function有一些鲜为人知的参数控制空白和其他漂亮的打印功能。看起来你想要JS标准的双空缩进,这就像JSON.stringify(object, null, ' ')这样的调用。

要添加分号 - 你真的不应该这样做 - 你可以简单地使用字符串连接:

fs.appendFile("../sha1.txt", JSON.stringify(object) + ';\n', function(err) {

这将在JSON字符串后面添加分号和换行符。由于序列化后添加了分号,因此无论行数如何,它都将出现在消息的末尾。