无法使用 Baby Parse 将 csv 解析为 json
unable to parse csv to json using Baby Parse
我正在尝试使用 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);
})
}
};
上传文件时调用上传函数并调用服务器控制器。
上传的文件被传递给上传函数,然后我试图将其传递给解析方法。
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 文件的样子,我不明白为什么数据:[] 是空的。
使用此处提供的答案 (),我已经让解析器工作了。
以下是我最终得到的结果:
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)));
只获取数据。
我正在尝试使用 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);
})
}
};
上传文件时调用上传函数并调用服务器控制器。 上传的文件被传递给上传函数,然后我试图将其传递给解析方法。
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 文件的样子,我不明白为什么数据:[] 是空的。
使用此处提供的答案 (
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)));
只获取数据。