Использование JSONStream для чтения больших файлов JSON
Я пытался прочитать файл с помощью JSONStream, но у меня нет особого опыта в этом, и было трудно найти информацию (учебные пособия, документацию) о нем.
Я нашел где-то здесь этот кусок кода:
var fs = require('fs'),
JSONStream = require('JSONStream');
var stream = fs.createReadStream('tst.json', {encoding: 'utf8'}),
parser = JSONStream.parse();
stream.pipe(parser);
console.log(parser);
parser.on('root', function (obj) {
console.log(obj); // whatever you will do with each JSON object
});
И я пытался использовать его с файлом теста json, например:
{
"colors": [{
"color": "black",
"category": "hue",
"type": "primary",
"code": {
"rgba": [255, 255, 255, 1],
"hex": "#000"
}
},
{
"color": "white",
"category": "value",
"code": {
"rgba": [0, 0, 0, 1],
"hex": "#FFF"
}
},
{
"color": "red",
"category": "hue",
"type": "primary",
"code": {
"rgba": [255, 0, 0, 1],
"hex": "#FF0"
}
},
{
"color": "blue",
"category": "hue",
"type": "primary",
"code": {
"rgba": [0, 0, 255, 1],
"hex": "#00F"
}
},
{
"color": "yellow",
"category": "hue",
"type": "primary",
"code": {
"rgba": [255, 255, 0, 1],
"hex": "#FF0"
}
},
{
"color": "green",
"category": "hue",
"type": "secondary",
"code": {
"rgba": [0, 255, 0, 1],
"hex": "#0F0"
}
}
]
}
И я думал, что он вернет все объекты, но ничего не произошло, он даже не входит в "parser.on('root', function (obj)"). Что я могу сделать, чтобы эта работа работала?
1 ответ
root
событие было удалено из JSONStream
, использование data
событие вместо https://github.com/dominictarr/JSONStream/commit/97d973ac59d0e58748cec98ea87aae36e057d368
Также следует указать путь JSON в качестве параметра для JSONStream.parse()
, Для вашего JSON это может быть JSONStream.parse('colors.*')
Таким образом, все вместе, это должно быть
var fs = require('fs'),
JSONStream = require('JSONStream');
var stream = fs.createReadStream('tst.json', {encoding: 'utf8'}),
parser = JSONStream.parse('colors.*');
stream.pipe(parser);
parser.on('data', function (obj) {
console.log(obj); // whatever you will do with each JSON object
});