How to write a JSON array to a file with Node.js writeStream?(如何使用Node.js WriteStream将JSON数组写入文件?)
问题描述
我编写了一个小Node.js脚本来从我正在遍历页面以提取结构化数据的网站上抓取数据。
我为每个页面提取的数据是对象数组的形式。
我想我可以使用fs.createWriteStream()
方法创建一个可写流,在每次提取页面后,我可以在该流上增量写入数据。
显然,您只能向流写入字符串或缓冲区,因此我正在执行以下操作:
output.write(JSON.stringify(operations, null, 2));
但最终,一旦我关闭流,JSON的格式就会错误,因为很明显,我只是一个接一个地追加每个页面的每个数组,结果如下所示:
[
{ ... }, /* data for page 1 */
{ ... }
][ /* => here is the problem */
{ ... }, /* data for page 2 */
{ ... }
]
如何才能继续将数组实际附加到输出中,而不是链接它们?它甚至可以做吗?
推荐答案
您的选项是...
- 在内存中保留完整的数组,在处理完所有页面后,仅写入末尾的json文件。
- 单独编写每个对象,并手动处理方括号和逗号。
类似这样的东西...
//start processing
output.write('[');
//loop through your pages, however you're doing that
while (more_data_to_read()) {
//create "operation" object
var operation = get_operation_object();
output.write(JSON.stringify(operation, null, 2));
if (!is_last_page()) {
//write out comma to separate operation objects within array
output.write(',');
}
}
//all done, close the json array
output.write(']');
这将创建格式正确的json。
就我个人而言,我会选择#1,因为这似乎是更"正确"的方法。如果您担心数组使用了太多内存,那么json可能不是数据文件的最佳选择。它不是特别适合极大的数据集。
在上面的代码示例中,如果进程中途中断,那么您将得到一个无效的json文件,因此逐步编写实际上不会使应用程序具有更强的容错能力。
这篇关于如何使用Node.js WriteStream将JSON数组写入文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何使用Node.js WriteStream将JSON数组写入文件?


基础教程推荐
- 动态更新多个选择框 2022-01-01
- 响应更改 div 大小保持纵横比 2022-01-01
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 在for循环中使用setTimeout 2022-01-01
- 我什么时候应该在导入时使用方括号 2022-01-01
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01