Разбор данных из потока не JSON - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь передавать изменения в файле журнала обновлений, анализировать результирующий поток данных и сохранять проанализированные значения в отдельных массивах. Я использую модуль fs-watch-stream , который сможет читать мой файл журнала и выводить различия. Однако fs-watch-stream не передает эти различия как JSON, это как поток битов, что означает, что JSON.parse не будет работать. Я анализирую исходный файл, используя JSONStream , который отлично работает. Есть ли способ использовать JSONStream для анализа изменений или есть лучший способ сделать это?

Начальная функция JSONStream

//Required modules
//@ts-ignore: undeclared module
const watchStream = require('fs-watch-stream')
const es = require('event-stream')
var JSONStream = require('JSONStream')
const fs = require('fs');


async function initial(){
    return new Promise(resolve => {
       var arr = [];
       var stream = fs.createReadStream('sample.json', {start: 3, encoding: 'utf8'});
       var parser = JSONStream.parse('employees.*');
       stream.pipe(parser);

       parser.on('data', function (obj) {
         arr.push(obj);
       });

       parser.on("close", function() {
         resolve(arr);
       });
    })
 };

fs-watch-stream

async function monitor(){
    fsWatchStream([
        { attacks: 'sample.json' }], monitor.pipe(append(res)))
    };

async function append(res){
    JSON.parse(res)
};

Образец. json

{
  "employees": {
    "employee": [
      {
        "id": "1",
        "firstName": "Tom",
        "lastName": "Cruise",
        "photo": "https://jsonformatter.org/img/tom-cruise.jpg"
      },
      {
        "id": "2",
        "firstName": "Maria",
        "lastName": "Sharapova",
        "photo": "https://jsonformatter.org/img/Maria-Sharapova.jpg"
      },
      {
        "id": "3",
        "firstName": "Robert",
        "lastName": "Downey Jr.",
        "photo": "https://jsonformatter.org/img/Robert-Downey-Jr.jpg"
      }
    ]
  }
}
...