![](/img/trans.png)
[英]Node.js: How can i store the jsonObj in a global variable after converting CSV to JSON by using csvtojson
[英]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.