最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

使用节点流JSON追加到文件

运维笔记admin13浏览0评论

使用节点流JSON追加到文件

使用节点流JSON追加到文件

基于我已阅读here,我使用fs.createWriteStream写一些JSON到一个文件中。我于是在脚本的开头的处理约50块的数据,我打开我的streamand然后用一个函数来传递它,有一些JSON,这是相当不错的写作一起。

const myStream = fs.createWriteStream(
  path.join(RESULTS_DIR, `my-file.json`),
  {
    flags: 'a'
  }
)


function appendJsonToFile(stream, jsonToAppend) {
  return new Promise((resolve, reject) => {
    try {
      stream.write(JSON.stringify(jsonToAppend, null, 2)
      resolve('STREAM_WRITE_SUCCESS')
    } catch (streamError) {
      reject('STREAM_WRITE_FAILURE', streamError)
    }
  })
}

appendJsonToFile(myStream, someJson)

但是,由于要写入的数据的每一块是对象的数组,结构我在文件看起来像这样最终得到:

[
    {
        "data": "test data 1",
    },
        {
        "data": "test data 2",
    }
][
    {
        "data": "test data 3",
    },
        {
        "data": "test data 4",
    }
]

How can I append these pieces of data so that the result is properly formatted JSON, rather than just a series of arrays?

回答如下:

如果文件始终格式化为你上面说的三件事情你需要做的是:

  1. 找出该文件的当前长度和减去2个字符(qazxsw POI,因为没有换行月底),
  2. 删除你节省了JSON的第一个字符,
  3. 使用\n]模式和r+保存文件
  4. 完流的每个保存后。

下面就来start的链接。

现在,另一件事是4点使得这个相当低效和问题的整体思路,如果流应在此处使用。我认为这有一定道理,但这里的问题是,如果你需要的文件是可读的写操作之间 - 如果没有,那么你应该在中间使用createWriteStream options与文件之间和所有工作之后添加红晕完成(transform stream)你只需结束流。

您可以通过定义做到这一点,但我是一个框架调用beforeExit这使得这些案件很容易的作者:

scramjet

您可以使用此方法同上,只是如果你愿意用普通节点流上这个工作本应轻移你在正确的方向。

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论