首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从csvtojson获取可用数组

从csvtojson获取可用数组
EN

Stack Overflow用户
提问于 2018-11-10 20:57:02
回答 3查看 2.2K关注 0票数 4

我看过使用csvtojson的代码示例,但每个示例都使用console.log()输出结果。下面的代码创建了一个名为'json‘的变量,但是我不知道如何在创建它的函数之外使用这个变量。如何导出变量'json‘以便在创建它的函数之外使用?:

代码语言:javascript
复制
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);
});

我真的希望它能像写这样的东西一样简单:

代码语言:javascript
复制
const dataArray = csv().fromFile(csvFilePath);

但是,dataArray并不包含我的数据,而是一个具有数据参数的对象。

任何线索都将不胜感激!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-08 21:12:59

自从我发布这个问题以来,我已经了解了一些异步函数和承诺。由于csvjson返回承诺,所以我将csv()的结果返回到链中的下一个函数:

代码语言:javascript
复制
    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
    })
票数 0
EN

Stack Overflow用户

发布于 2018-11-11 09:43:55

问题是fromFile是异步的,一旦调用了异步代码,就会处于回调中。

该模块似乎没有提供同步替代方案。你的选择是:

  • 在回调中继续您的程序逻辑:

代码语言:javascript
复制
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
    // .....
    // .....
});
  • 使用异步/等待

您似乎在使用旧版本的csvtojson,因此您可能需要升级它才能使用以下内容:

代码语言:javascript
复制
(async () => {

  var jsons =  await csv().fromFile(csvFilePath);
  console.log(jsons);

})()
.catch((err) => {
  console.log(err);
});

基本上,这将您的代码包装在一个async函数中。在它中,如果使用fromFile关键字,则可以使用await的返回值。

  • 使用不同的模块来支持同步加载,甚至自己进行解析。
票数 1
EN

Stack Overflow用户

发布于 2018-11-10 22:57:36

带函数映射的csvJSON函数

代码语言:javascript
复制
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
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53243335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档