【问题标题】:Reading changes in JSON file using JS使用 JS 读取 JSON 文件中的更改
【发布时间】:2020-04-18 14:52:39
【问题描述】:

我正在尝试从 syslog-ng 读取更新的 JSON 文件。目前,日志软件 syslog 被设置为不断地附加一个 JSON 文件,其中包含我想要的数据的日志。我在我的网络攻击地图上仅显示数据 30 秒,直到不再需要它为止。我可以读取文件并解析我需要的内容,但是随着时间的推移,有没有办法只读取和解析文件中最近添加的内容?

示例代码:

//Assume JSON output = {attack source, attack destination, attack type}

//Required modules
var JSONStream = require('JSONStream')
var fs = require('fs');

//Creates readable stream for JSON file parsing
var stream = fs.createReadStream( 'output.json', 'utf8'),
    parser = JSONStream.parse(['source', 'dest', 'type']);

//Send read data to parser function
stream.pipe(parser);

//Intake data from parser function
parser.on('data', function (obj) {

    //Do something with the object
    console.log(obj);
  });

我正在使用 JSONStream 以避免将整个日志文件读入内存,JSONstream 应该仍然能够解析我想要的位,但是有没有一种方法可以在原始读取完成后才读取更改?

【问题讨论】:

  • 如果 json 真的很大,那么你就不能拆分它,要逐个解析,你必须等到完整文件加载到任何流或缓冲区
  • 嗯,这可能就是我要找的东西:npmjs.com/package/fs-watch-stream
  • @DickensAS 你能详细解释一下吗?我认为流式传输 JSON 会使得不需要将整个文件读取到内存中。
  • @DickensAS 那么将整个文件读入内存会更好吗?我不会遇到内存问题吗?
  • 内容是什么样的,它是一个完整的 json 以花括号开头并以花括号结尾吗?或者它是一个新行分隔的多 json 日志文件?

标签: javascript json parsing syslog-ng


【解决方案1】:

使用库中提供的这个代码示例

JSONStream Test code

您不必等待结束,您可以使用回调逐个对象做您的工作

但是文件结构应该像文件夹中给出的文件一样符合库的期望

示例文件all_npm.json

【讨论】:

    猜你喜欢
    • 2022-01-26
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 2023-02-22
    • 2016-04-19
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多