将csv转换为json对象将返回undefined

时间:2018-04-15 22:36:28

标签: json node.js csv callback

我在S / O和其他方面找到了几个例子,但它们似乎没有帮助我。

我在节点中创建一个私有模块,它接受一个csv并将其转换为一个json对象。它正确地将正确的值输出到命令行,但对象本身是未定义的。

exports.csvToJSON = function(file, callback) {
  converter.fromFile(file, function(err, result) {
    if (err) {
      console.log('error: ', error)
    } else {
      return result;
      callback(err, result);
    }
  });
  console.log(callback)
}

我目前正在使用csvtojson模块并尝试过其他类似的软件包。我引用的文章:

我不确定我是否只是没有正确理解回调,但即使我console.log(result.type),它返回undefined有或没有回调。我也试过像这样定义回调:

exports.csvToJSON = function(file, callback) {
  csvtojson().fromFile(file, function(err, result) {
    if (err) {
      console.log('error: ', error)
    }
    return result;
    callback(result);
  });
}

以下是控制台输出的示例:

   Mirandas-MacBook-Pro:zendesktool mirandashort$ node ./controllers/update.js
[ { ticket:
     { ids: '3280805',
       requester_email: 'miranda@barkbox.com',
       status: 'pending',
       comment: [Object],
       subject: 'sup dog',
       custom_fields: [Object],
       add_tags: 'update_via_csv, dogs_are_cool, sup' } } ] undefined

现在,由于我的其他功能依赖于此工作,我只在exports.csvToJSON('update2.csv')的文件中调用它,其中update2.csv是实际文件。最终这将在我将使用异步的另一个函数内部调用,但我需要首先使用它。另外,当第二个代码块示例调用时,该输出似乎与console.log(err)相关联,我不确定为什么。

或者如果有一种方法可以在没有csvtojson的情况下完全执行此操作,那也没关系。唯一的要求是csv格式的文件可以作为对象数组返回。

1 个答案:

答案 0 :(得分:0)

知道了。我只是使用瀑布将两个单独的模型组合在一起:

exports.csvToJSON = function(file, callback) {
  csvtojson().fromFile(file, function(err, result) {
    if (err) {
      console.log(err);
    } else {
      callback(null, result[0]);
    }
  });
}

exports.zdUpdateMany = function(data, callback) {
  credentials.config.tickets.updateMany(3280805, data, function(err, result) {
    if (err) {
      console.log(err);
    } else {
      callback(false, result);
    }
  });
}


// function to update tickets
exports.processUpdate = function(file, callback) {
  async.waterfall([
    async.apply(exports.csvToJSON, file),
    exports.zdUpdateMany
  ], function(err, result) {
    if (err) {
      console.log(err);
    } else {
      console.log(result);
    }
    callback(err, result);
  });
}