मेरे पास एक फाइल है जो JSON फॉर्म में कई जावास्क्रिप्ट ऑब्जेक्ट्स को स्टोर करती है और मुझे फाइल पढ़ने की जरूरत है, प्रत्येक ऑब्जेक्ट को बनाएं, और उनके साथ कुछ करें (उन्हें मेरे मामले में db में डालें)। जावास्क्रिप्ट वस्तुओं को एक प्रारूप का प्रतिनिधित्व किया जा सकता है:
प्रारूप A:
[{name: 'thing1'},
....
{name: 'thing999999999'}]
या प्रारूप बी:
{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
या शायद कुछ और ही है, बस अपने जवाब में स्पष्ट कर दें। धन्यवाद!