javascript - 从 node.js 中的文件流中删除最后一个字符(fs 模块)

标签 javascript json node.js string fs

使用 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.lengthfile.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/

相关文章:

javascript - 类型错误 : Object function EventEmitter()

javascript - 使用 CSS 和 jQuery 的动态的、表格式的列表项行

javascript - 如何在Jmeter中调用Beanshell中的javaScript函数

javascript - 在 jQuery 中将数组从一个函数传递到另一个函数

javascript - 我试图在 Figma 中找到页面的页面 ID 并将其映射到 Google Slides 中的对象 ID

node.js - 如何在聚焦于另一个程序后打开 Electron 窗口时聚焦于它

javascript - 了解制作网格(Eloquent js 第 6 章)

python - 由于数据长度不等,将嵌套 JSON 列表展平为 Pandas DataFrame 时出现问题

android - 在 android 上的本地主机中读取简单的 Json

node.js - 在nodejs中使用pdfkit创建pdf文件