簡體   English   中英

csvtojson node.js(結合兩個代碼)

[英]csvtojson node.js (combine two codes)

如何組合這兩個代碼,這樣它不僅將 csv 轉換為 Json(第一個代碼),而且還將其作為 json 數組保存在一個額外的文件中?(第二個代碼)這個(第一個)代碼將 csv 文件轉換為 json 數組:

const fs = require("fs");

let fileReadStream = fs.createReadStream("myCsvFile.csv");
let invalidLineCount = 0;

const csvtojson = require("csvtojson");
csvtojson({ "delimiter": ";", "fork": true })
.preFileLine((fileLineString, lineIdx)=> {
    let invalidLinePattern = /^['"].*[^"'];/;
    if (invalidLinePattern.test(fileLineString)) {
        console.log(`Line #${lineIdx + 1} is invalid, skipping:`, fileLineString);
        fileLineString = "";
        invalidLineCount++;
    }
    return fileLineString
})
.fromStream(fileReadStream) 
.subscribe((dataObj) => { 
    console.log(dataObj);
// I added the second code hier, but it wirtes the last object of the array (because of the loop?)
}    
});

這個(第二個)代碼將 json 數組保存到一個外部文件中:

fs.writeFile('example.json', JSON.stringify(dataObj, null, 4);

問題是如何將第二個代碼放入第一個代碼中(組合它們)?

您可以使用.on('done',(error)=>{ ... })方法。 ( csvtojson )。 subscribe方法中將數據推送到一個變量中,並將數據以 JSON 的形式寫入.on('done') (測試成功)。

一探究竟:

let fileReadStream = fs.createReadStream("username-password.csv");
let invalidLineCount = 0;
let data = []

csvtojson({ "delimiter": ";", "fork": true })
  .preFileLine((fileLineString, lineIdx)=> {
    let invalidLinePattern = /^['"].*[^"'];/;
    if (invalidLinePattern.test(fileLineString)) {
        console.log(`Line #${lineIdx + 1} is invalid, skipping:`, fileLineString);
        fileLineString = "";
        invalidLineCount++;
    }
    return fileLineString
  })
  .fromStream(fileReadStream) 
  .subscribe((dataObj) => {
    // console.log(dataObj)
    data.push(dataObj)
  })
  .on('done',(error)=>{
    fs.writeFileSync('example.json', JSON.stringify(data, null, 4))
  })

不確定您是否能夠更改庫,但我肯定會為此推薦 Papaparse - https://www.npmjs.com/package/papaparse

您的代碼將如下所示:

const fs = require('fs'), papa = require('papaparse');
  var readFile = fs.createReadStream(file);
        papa.parse(readFile, {
            complete: function (results, file) {
                fs.writeFile('example.json', JSON.stringifiy(results.data), function (err) {
                  if(err) console.log(err);
                  // callback etc
                })
            }
        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM