第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在Node.js中解析大型JSON文件

在Node.js中解析大型JSON文件

慕妹3242003 2019-11-25 10:36:28
我有一個(gè)文件,該文件以JSON形式存儲(chǔ)許多JavaScript對(duì)象,我需要讀取該文件,創(chuàng)建每個(gè)對(duì)象并對(duì)其進(jìn)行處理(在我的情況下,將它們插入到db中)。JavaScript對(duì)象可以表示為以下格式:格式A:[{name: 'thing1'},....{name: 'thing999999999'}]或格式B:{name: 'thing1'}         // <== My choice....{name: 'thing999999999'}請(qǐng)注意,...表示很多JSON對(duì)象。我知道我可以將整個(gè)文件讀入內(nèi)存,然后JSON.parse()像這樣使用:fs.readFile(filePath, 'utf-8', function (err, fileContents) {  if (err) throw err;  console.log(JSON.parse(fileContents));});但是,該文件可能真的很大,我希望使用流來(lái)完成此操作。我在流中看到的問(wèn)題是,文件內(nèi)容隨時(shí)可能被分解成數(shù)據(jù)塊,那么如何JSON.parse()在此類對(duì)象上使用?理想情況下,每個(gè)對(duì)象將被讀取為一個(gè)單獨(dú)的數(shù)據(jù)塊,但是我不確定如何做到這一點(diǎn)。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!");});*/注意,我希望防止將整個(gè)文件讀入內(nèi)存。時(shí)間效率對(duì)我來(lái)說(shuō)并不重要。是的,我可以嘗試一次讀取多個(gè)對(duì)象并一次插入所有對(duì)象,但這是性能上的調(diào)整-我需要一種方法來(lái)確保不會(huì)引起內(nèi)存過(guò)載,無(wú)論文件中包含多少個(gè)對(duì)象。我可以選擇使用,F(xiàn)ormatA或者選擇FormatB其他方式,只需在您的答案中指定即可。謝謝!
查看完整描述

3 回答

?
胡子哥哥

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個(gè)贊

正如我以為編寫(xiě)流式JSON解析器會(huì)很有趣一樣,我也認(rèn)為也許應(yīng)該快速搜索一下是否已有一個(gè)可用的。


原來(lái)有。


JSONStream “流式JSON.parse和字符串化”

自從我找到它以來(lái),我顯然沒(méi)有使用過(guò)它,因此我無(wú)法評(píng)論它的質(zhì)量,但是我很想知道它是否有效。


考慮以下Javascript并可以正常工作_.isString:


stream.pipe(JSONStream.parse('*'))

  .on('data', (d) => {

    console.log(typeof d);

    console.log("isString: " + _.isString(d))

  });

如果流是對(duì)象數(shù)組,則將記錄對(duì)象進(jìn)入時(shí)的狀態(tài)。因此,唯一要緩沖的是一次僅一個(gè)對(duì)象。


查看完整回答
反對(duì) 回復(fù) 2019-11-25
  • 3 回答
  • 0 關(guān)注
  • 1451 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)