如何在Node.js中向后读取大型jsonl文件

问题描述

一种从上到下逐行读取文件的简单方法:

const { once } = require('events');
const { createReadStream } = require('fs');
const { createInterface } = require('readline');

let storeProducts = async () => {
    try {
        const filename = path.join(__dirname,"bulk-101638307937.jsonl");
        const rl = createInterface({
          input: createReadStream(filename),crlfDelay: Infinity
        });
    
        rl.on('line',(line) => {
          // Process the line.
          console.log({line: JSON.parse(line)});
        });
    
        await once(rl,'close');
    
        console.log('File processed.');
      } catch (err) {
        console.error(err);
    }
}

这很好。但是我需要逐行向后读取一个大的jsonl文件。我已经尝试过Draw a concave polygon in OpenGL。它向后读取文件,但不是逐行读取。任何帮助将不胜感激。

一个示例jsonl

{"id": 1,"product": "A"}
{"variant_id": 1,"product": "A"}
{"id": 2,"product": "B"}
{"variant_id": 2,"product": "B"}
{"id": 3,"product": "C"}
{"variant_id": 3,"product": "C"}
{"id": 4,"product": "D"}
{"variant_id": 4,"product": "D"}
{"variant_id": 5,"product": "D"}

解决方法

fs-reverse库应该可以解决问题:

const fsR = require('fs-reverse');
const filename = './sample.jsonl';

const readStream = fsR(filename,{})

readStream.on('data',(line) => {
  if(line) { // have this check to make sure empty lines are not parsed
    console.log(JSON.parse(line))
  }
})

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...