Saya memiliki file yang menyimpan banyak objek JavaScript dalam bentuk JSON dan saya perlu membaca file tersebut, membuat setiap objek, dan melakukan sesuatu dengannya (masukkan ke dalam db dalam kasus saya). Objek JavaScript dapat direpresentasikan dalam format:
Format A:
[{name: 'thing1'},
....
{name: 'thing999999999'}]
atau Format B:
{name: 'thing1'} // <== My choice.
...
{name: 'thing999999999'}
Perhatikan bahwa ...
menunjukkan banyak objek JSON. Saya sadar saya bisa membaca seluruh file ke dalam memori dan kemudian menggunakan JSON.parse()
seperti ini:
fs.readFile(filePath, 'utf-8', function (err, fileContents) {
if (err) throw err;
console.log(JSON.parse(fileContents));
});
Namun, filenya bisa sangat besar, saya lebih suka menggunakan aliran untuk melakukannya. Masalah yang saya lihat dengan aliran adalah bahwa konten file dapat dipecah menjadi potongan data kapan saja, jadi bagaimana saya dapat menggunakannya JSON.parse()
pada objek seperti itu?
Idealnya, setiap objek akan dibaca sebagai potongan data yang terpisah, tetapi saya tidak yakin bagaimana melakukannya .
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!");
});*/
Catatan, saya ingin mencegah membaca seluruh file ke dalam memori. Efisiensi waktu tidak penting bagi saya. Ya, saya dapat mencoba membaca sejumlah objek sekaligus dan memasukkan semuanya sekaligus, tetapi itu adalah tweak kinerja - Saya memerlukan cara yang dijamin tidak menyebabkan kelebihan memori, tidak peduli berapa banyak objek yang ada di file .
Saya dapat memilih untuk menggunakan FormatA
atau FormatB
atau mungkin yang lain, harap sebutkan dalam jawaban Anda. Terima kasih!