Как разбирать большой файл JSON с разделителем строки с помощью JSON с помощью модуля JSONStream в node.js?

У меня есть большой json файл, его JSON с разделителями строк, где несколько стандартных объектов JSON ограничены дополнительными символами новой строки, например.

{'name':'1','age':5}
{'name':'2','age':3}
{'name':'3','age':6}

Теперь я использую JSONStream в node.js для синтаксического анализа большого json файла, поэтому я использую JSONStream, потому что он основан на потоке.

Однако оба синтаксиса синтаксического анализа в примере не могут помочь мне разобрать этот json файл с разделенным JSON в каждой строке

var parser = JSONStream.parse(**['rows', true]**);
var parser = JSONStream.parse([**/./**]);

Может кто-нибудь помочь мне с этим

Ответы

Ответ 1

Предупреждение. Поскольку этот ответ был написан, автор библиотеки JSONStream удалил функцию испускания корневого события., по-видимому, для исправления утечки памяти. Будущие пользователи этой библиотеки, вы можете использовать версии 0.x.x, если вам нужна функция испускания root.

Ниже представлен немодифицированный оригинальный ответ:

Из readme:

JSONStream.parse(путь)

path должен быть массив имен свойств, RegExps, booleans и/или функций. Любой объект, который соответствует пути, будет испускаться как 'data'.

Событие

A 'root' испускается, когда все данные получены. Событие 'root' передает корневой объект и количество совпадающих объектов.

В вашем случае, поскольку вы хотите вернуть объекты JSON в отличие от определенных свойств, вы будете использовать событие 'root', и вам не нужно указывать путь.

Ваш код может выглядеть примерно так:

var fs = require('fs'),
    JSONStream = require('JSONStream');

var stream = fs.createReadStream('data.json', {encoding: 'utf8'}),
    parser = JSONStream.parse();

stream.pipe(parser);

parser.on('root', function (obj) {
  console.log(obj); // whatever you will do with each JSON object
});

Ответ 2

JSONstream предназначен для синтаксического анализа одного огромного объекта JSON, а не множества объектов JSON. Вы хотите разбить поток на новые строки, а затем проанализировать их как JSON.

Пакет NPM split утверждает, что делает это разделение и даже имеет для анализа строк JSON для вас.