从 csvtojson 获取可用数组
Get usable array from csvtojson
我看过使用 csvtojson 的代码示例,但每个示例都只是使用 console.log() 输出结果。下面的代码创建了一个名为 'json' 的变量,但我不知道如何在创建它的函数之外使用它。如何导出变量 'json' 以便在创建它的函数之外使用?:
const csvFilePath='<path to csv file>'
const csv=require('csvtojson')
csv().fromFile(csvFilePath,function(err,result){
if(err){
console.log("An Error Has Occured");
console.log(err);
}
var json = result; // I want to use this var outside of this function.
console.log(json);
});
我真的希望它像写这样的东西一样简单:
const dataArray = csv().fromFile(csvFilePath);
但是,dataArray 不包含我的数据,而是看起来是一个带有数据参数的对象。
任何线索将不胜感激!
带有函数映射的 csvJSON 函数
var csvJSON = function(csv){
var lines = csv.split("\n");
var result = [];
var headers = lines[0].split(",");
lines.map(function(line, indexLine){
if (indexLine < 1) return // Jump header line
var obj = {};
var currentline = line.split(",");
headers.map(function(header, indexHeader){
obj[header] = currentline[indexHeader];
})
result.push(obj);
})
result.pop(); // remove the las`enter code here`t item because undefined values
return result; // JavaScript object
}
问题是 fromFile
是异步的,一旦你调用了异步代码,你就生活在回调中。
该模块似乎没有提供同步选项。您的选择是:
- 在回调中继续您的程序逻辑:
csv().fromFile(csvFilePath,function(err,result){
if(err){
console.log("An Error Has Occured");
console.log(err);
}
var json = result;
console.log(json);
// Continue your logic here
// .....
// .....
});
- 使用async/await
您使用的似乎是旧版本的 csvtojson
,因此您可能需要升级它才能使用:
(async () => {
var jsons = await csv().fromFile(csvFilePath);
console.log(jsons);
})()
.catch((err) => {
console.log(err);
});
基本上,这会将您的代码包装在 async
函数中。在其中,如果使用 await
关键字,则可以使用 fromFile
的 return 值。
- 使用支持同步加载的不同模块,甚至自己进行解析。
自从我发布这个问题后,我对异步函数和承诺有了一些了解。由于 csvjson returns 承诺,我 return csv() 的结果到我链中的下一个函数:
const csv = require('csvtojson');
const filePath = '<path to csv file>';
// previous async function in promise chain
.then(() => {
return csv().fromFile(filePath)
})
.then(data => { // 'data' contains the json as converted by csv()
// next step in promise chain
})
我看过使用 csvtojson 的代码示例,但每个示例都只是使用 console.log() 输出结果。下面的代码创建了一个名为 'json' 的变量,但我不知道如何在创建它的函数之外使用它。如何导出变量 'json' 以便在创建它的函数之外使用?:
const csvFilePath='<path to csv file>'
const csv=require('csvtojson')
csv().fromFile(csvFilePath,function(err,result){
if(err){
console.log("An Error Has Occured");
console.log(err);
}
var json = result; // I want to use this var outside of this function.
console.log(json);
});
我真的希望它像写这样的东西一样简单:
const dataArray = csv().fromFile(csvFilePath);
但是,dataArray 不包含我的数据,而是看起来是一个带有数据参数的对象。
任何线索将不胜感激!
带有函数映射的 csvJSON 函数
var csvJSON = function(csv){
var lines = csv.split("\n");
var result = [];
var headers = lines[0].split(",");
lines.map(function(line, indexLine){
if (indexLine < 1) return // Jump header line
var obj = {};
var currentline = line.split(",");
headers.map(function(header, indexHeader){
obj[header] = currentline[indexHeader];
})
result.push(obj);
})
result.pop(); // remove the las`enter code here`t item because undefined values
return result; // JavaScript object
}
问题是 fromFile
是异步的,一旦你调用了异步代码,你就生活在回调中。
该模块似乎没有提供同步选项。您的选择是:
- 在回调中继续您的程序逻辑:
csv().fromFile(csvFilePath,function(err,result){
if(err){
console.log("An Error Has Occured");
console.log(err);
}
var json = result;
console.log(json);
// Continue your logic here
// .....
// .....
});
- 使用async/await
您使用的似乎是旧版本的 csvtojson
,因此您可能需要升级它才能使用:
(async () => {
var jsons = await csv().fromFile(csvFilePath);
console.log(jsons);
})()
.catch((err) => {
console.log(err);
});
基本上,这会将您的代码包装在 async
函数中。在其中,如果使用 await
关键字,则可以使用 fromFile
的 return 值。
- 使用支持同步加载的不同模块,甚至自己进行解析。
自从我发布这个问题后,我对异步函数和承诺有了一些了解。由于 csvjson returns 承诺,我 return csv() 的结果到我链中的下一个函数:
const csv = require('csvtojson');
const filePath = '<path to csv file>';
// previous async function in promise chain
.then(() => {
return csv().fromFile(filePath)
})
.then(data => { // 'data' contains the json as converted by csv()
// next step in promise chain
})