Birçok JavaScript nesnesini JSON biçiminde saklayan bir dosyam var ve dosyayı okumam, nesnelerin her birini oluşturmam ve onlarla bir şeyler yapmam gerekiyor (benim durumumda bunları bir db'ye ekleyin). JavaScript nesneleri bir formatta temsil edilebilir:
Biçim A:
[{name: 'thing1'},
....
{name: 'thing999999999'}]
veya B Biçimi:
{name: 'thing1'} // <== My choice.
...
{name: 'thing999999999'}
...
Çok sayıda JSON nesnesini gösterdiğini unutmayın . Dosyanın tamamını belleğe okuyabileceğimi ve ardından şu şekilde kullanabileceğimi biliyorum JSON.parse()
:
fs.readFile(filePath, 'utf-8', function (err, fileContents) {
if (err) throw err;
console.log(JSON.parse(fileContents));
});
Bununla birlikte, dosya gerçekten büyük olabilir, bunu başarmak için bir akış kullanmayı tercih ederim. Bir akışta gördüğüm sorun, dosya içeriklerinin herhangi bir noktada veri parçalarına bölünebilmesidir, bu nedenle bu JSON.parse()
tür nesneler üzerinde nasıl kullanabilirim ?
İdeal olarak, her nesne ayrı bir veri parçası olarak okunacaktır, ancak bunu nasıl yapacağımdan emin değilim .
var importStream = fs.createReadStream(filePath, {flags: 'r', encoding: 'utf-8'});
importStream.on('data', function(chunk) {
var pleaseBeAJSObject = JSON.parse(chunk);
// insert pleaseBeAJSObject in a database
});
importStream.on('end', function(item) {
console.log("Woot, imported objects into the database!");
});*/
Not, tüm dosyanın hafızaya alınmasını engellemek istiyorum. Zaman verimliliği benim için önemli değil. Evet, aynı anda birkaç nesneyi okuyup hepsini birden yerleştirmeyi deneyebilirim, ancak bu bir performans ayarlaması - Dosyada kaç nesne olursa olsun, bellek aşırı yüklenmesine neden olmama garantili bir yönteme ihtiyacım var .
Ben kullanmayı seçebilir FormatA
veya FormatB
ya da belki başka bir şey, sadece cevap belirtiniz. Teşekkürler!