ฉันมีไฟล์ที่เก็บออบเจ็กต์ JavaScript จำนวนมากในรูปแบบ JSON และฉันต้องการอ่านไฟล์สร้างอ็อบเจ็กต์แต่ละรายการและทำอะไรบางอย่างกับพวกเขา (แทรกลงในฐานข้อมูลในกรณีของฉัน) วัตถุ JavaScript สามารถแสดงในรูปแบบ:
รูปแบบ A:
[{name: 'thing1'},
....
{name: 'thing999999999'}]
หรือรูปแบบ B:
{name: 'thing1'} // <== My choice.
...
{name: 'thing999999999'}
สังเกตว่า...
อ็อบเจ็กต์ JSON ระบุจำนวนมาก ฉันทราบว่าฉันสามารถอ่านไฟล์ทั้งหมดลงในหน่วยความจำได้แล้วใช้JSON.parse()
ดังนี้:
fs.readFile(filePath, 'utf-8', function (err, fileContents) {
if (err) throw err;
console.log(JSON.parse(fileContents));
});
อย่างไรก็ตามไฟล์อาจมีขนาดใหญ่มากฉันต้องการใช้สตรีมเพื่อทำสิ่งนี้ให้สำเร็จ ปัญหาที่ฉันพบในสตรีมคือเนื้อหาของไฟล์อาจแตกออกเป็นส่วนข้อมูล ณ จุดใดก็ได้ดังนั้นฉันจะใช้JSON.parse()
กับวัตถุดังกล่าวได้อย่างไร
จะเป็นการดีที่แต่ละวัตถุจะอ่านเป็นก้อนข้อมูลที่แยกกัน แต่ผมไม่แน่ใจว่าเกี่ยวกับวิธีการทำที่
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!");
});*/
หมายเหตุฉันต้องการป้องกันไม่ให้อ่านไฟล์ทั้งหมดลงในหน่วยความจำ ประสิทธิภาพของเวลาไม่สำคัญสำหรับฉัน ใช่ฉันสามารถลองอ่านวัตถุจำนวนหนึ่งพร้อมกันและแทรกทั้งหมดได้ในคราวเดียว แต่นั่นเป็นการปรับแต่งประสิทธิภาพ - ฉันต้องการวิธีที่รับประกันว่าจะไม่ทำให้หน่วยความจำมากเกินไปไม่ว่าจะมีวัตถุอยู่ในไฟล์กี่ชิ้นก็ตาม .
ฉันสามารถเลือกใช้FormatA
หรือFormatB
หรืออย่างอื่นได้โปรดระบุในคำตอบของคุณ ขอบคุณ!