comment analyser un grand fichier JSON délimité par une nouvelle ligne par le module JSONStream dans le noeud.js?

j'ai un grand fichier json, il s'agit de JSON délimité par une nouvelle ligne, où plusieurs objets JSON standard sont délimités par des lignes supplémentaires, par exemple

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

j'utilise maintenant JSONStream dans node.js pour analyser un gros fichier json, la raison pour laquelle j'utilise JSONStream est qu'il est basé sur stream.

cependant, la syntaxe parse dans l'exemple ne peut pas m'aider à analyser ce fichier json avec JSON séparé dans chaque ligne

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

quelqu'un Peut-il m'aider

18
demandé sur peak 2013-02-28 00:19:33

2 réponses

Avertissement: puisque cette réponse a été écrite, l'auteur de la bibliothèque JSONStream suppression de la fonctionnalité emit root event, apparemment pour réparer une fuite de mémoire. Les futurs utilisateurs de cette bibliothèque, vous pouvez utiliser le 0.x.versions x si vous avez besoin de la fonctionnalité emit root.

ci-dessous se trouve la réponse originale non modifiée:

readme:

JSONStream.parse(chemin)

path devrait être un tableau de noms de propriétés, RegExps, booléens, et/ou fonctions. Tout objet qui correspond au chemin sera émis comme 'data'.

'root' événement est émis lorsque toutes les données ont été reçues. 'root' l'événement passe l'objet racine et le nombre d'objets appariés.

dans votre cas, puisque vous voulez récupérer les objets JSON par opposition aux propriétés spécifiques, vous utiliserez le 'root' événement et vous n'avez pas besoin de spécifier chemin.

Votre code pourrait ressembler à quelque chose comme ceci:

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
});
16
répondu frangio 2016-04-18 13:45:30

JSONstream est destiné à analyser un seul objet JSON énorme, pas beaucoup d'objets JSON. Vous voulez partager le flux à newlines, puis les analyser comme JSON.

le paquet NPM split prétend faire ce fractionnement, et a même un fonctionnalité pour analyser les lignes JSON pour vous.

0
répondu rjmunro 2017-12-11 10:36:07