使用 node.js,我正在尝试构建一个对象数组并将它们写入文件。为此,我使用了内置的 fs 库。
调用后
var file = fs.createWriteStream('arrayOfObjects.json');
和 file.write('[')
我运行了几个异步函数来最终追加对象,如下所示:
file.write(JSON.stringify(objectToAppend) + ',\n')
我可以确定所有对象何时停止附加,这就是我运行 file.write(']')
和 file.end()
的地方。 我的问题是在最后一个对象的末尾添加最后一个逗号会导致 JSON 无效。
由于脚本的异步特性,很难确定创建最后一个对象的位置和时间,所以我想知道是否有办法从文件流中删除或删除字符。如果是这样,我可以在添加最后一个 ']'
字符之前执行此操作。
我可以手动执行此操作,但我希望将其通过管道传输到另一个应用程序。我想到的唯一解决方案是使用 fs.truncate()
函数,但这似乎不适用于文件流,并且 file.length
或file.length()
会给我内容的长度,因为它不是字符串,所以很难确定如何或在哪里 chop 文件。
目前我只是将 '{}]'
添加到数组的末尾以使其成为有效的 JSON,但是这个空对象可能会在以后引起一些问题。
另外注意:我在这个流中写入的对象数组非常大,所以我宁愿不结束流并重新打开文件。
最佳答案
我建议改为在前面添加分隔符,以便您可以在第一次调用后动态调整它:
file.write('[\n')
var sep = "";
forEach(function(objectToAppen) {
file.write(sep + JSON.stringify(objectToAppend))
if (!sep)
sep = ",\n";
});
关于javascript - 从 node.js 中的文件流中删除最后一个字符(fs 模块),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30901153/