【问题标题】:unable to parse csv to json using Baby Parse无法使用 Baby Parse 将 csv 解析为 json
【发布时间】:2016-04-22 22:03:57
【问题描述】:

我正在尝试使用 baby parse(Papa Parse 的分支)获取 csv 文件并将数据解析为 Json。 我正在测试的 csv 文件非常简单:

Column1,Column2,Column3
1,2,3
3,2,1

到目前为止,我已成功使用 ng-file-upload 加载文件以通过浏览器加载 csv 文件。

我现在正在尝试使用 baby parse 来获取此文件并将数据转换为 JSON。

以下是我目前所拥有的:

控制器

// Watch for a csv file being uploaded.
$scope.$watch(function() {
    return $scope.file
    }, function(){
        $scope.upload($scope.file);
});

$scope.upload = function(file){
            if(file){
                Upload.upload({
                    url: 'api/admin/uploadCsv',
                    method: 'POST',
                    data: {userId: $scope.user._id},
                    file: file
                }).progress(function(evt){
                    console.log("firing");
                }).success(function(data){

                }).error(function(error){
                    console.log(error);
                })
            }
        };

在文件上传时调用上传函数并调用服务器控制器。 上传的文件被传递给上传函数,然后我试图传递给 parse 方法。

module.exports.uploadCsv = function(req, res){
    var file = req.files.file;
    var userId = req.body.userId;

    parsed = babyparse.parse(file.path, babyParseConfig);
    console.log("data is " + (JSON.stringify(parsed.data)));
    ...

console.log 输出以下内容:

data is {"data":[],"errors":[],"meta":{"delimiter":",","linebreak":"\n","aborted":false,"truncated":false,"fields":["..\\App\\uploads\\565b8feecddbb1e41b7aa839test.csv"]}}

鉴于 csv 文件的外观,我无法理解为什么 data:[] 为空。

【问题讨论】:

  • 你确定服务器上file.path的内容是CSV文件吗?如果您阅读file.path 并记录其内容,您会得到什么?

标签: angularjs json node.js csv papaparse


【解决方案1】:

使用此处提供的答案 (how to give file name a input in baby parser),我已经让解析器工作了。 以下是我最终得到的结果:

   var uploadcontent = fs.readFileSync(targetPath, { encoding: 'binary' });
   var parsed = babyparse.parse(uploadcontent);
   console.log((JSON.stringify(parsed)));

请注意,uploadContent 是我保存文件的目录的路径,而不是文件本身。

以上输出如下

{"data":[["Column1","Column2","Column3"],["1","2","3"],["3","2","1"]],"errors":[],"meta":{"delimiter":",","linebreak":"\r\n","aborted":false,"truncated":false}}

上面可以提炼成console.log((JSON.stringify(parsed.data))); 只获取数据。

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 2017-09-07
    • 1970-01-01
    • 2021-11-13
    • 2016-11-05
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多