无法使用PapaParse';未解析';将JSON转换为CSV
我试图使用babyParse将JSON对象转换为CSV,并将生成的CSV格式输出到系统上的文件中无法使用PapaParse';未解析';将JSON转换为CSV,json,node.js,export-to-csv,papaparse,Json,Node.js,Export To Csv,Papaparse,我试图使用babyParse将JSON对象转换为CSV,并将生成的CSV格式输出到系统上的文件中 module.exports.downloadItemCsv = function(req, res){ Item.find({}) .sort({date:-1}) .exec(function(err, allItems){ if(err){ res.error(err) }
module.exports.downloadItemCsv = function(req, res){
Item.find({})
.sort({date:-1})
.exec(function(err, allItems){
if(err){
res.error(err)
} else{
var configuration = {
quotes: false,
delimiter: ",",
newline: "\r\n"
};
console.log(allItems);
console.log("Adding items to object.");
var csv = baby.unparse(allItems, configuration);
var targetPath = path.join(__dirname,"../../uploads/" + "newFile01");
fs.writeFile(targetPath, csv, function(err){
if(err){
console.log("Write complete!")
}
});
console.log("The file was saved!");
res.json({status: 200})
}
})
};
console.log(allItems)
输出正确的JSON对象,但当我为csv变量执行console.log时,输出似乎是来自baby Parse模块的函数页面
就我在PapaParse文档中所知,我应该只需要在var csv=baby.unpasse(allItems,configuration)行中传递JSON对象代码>
一旦变量“csv”中有了未解析的数据,我就应该能够将csv写入文件。有人知道为什么JSON对象没有被解析为csv对象吗
以下是allItems中的数据:
[ { __v: 0,
itemId: 2507,
item: 'TEST',
description: 'TEST',
brand: 'TEST',
category: 'TEST',
subcategory: 'TEST',
size: '10',
gender: 'F',
costPrice: 10,
salePrice: 10,
saleDate: '2016-01-31',
purchaseDate: '2016-01-31',
_id: 56ae7972049ce640150453b7 } ]
下面是填充到变量“csv”中的结果的示例。完整的结果是大到放在下面
$__,isNew,errors,_doc,$__original_save,save,_pres,_posts,db,discriminators,__v,id,_id,purchaseDate,saleDate,salePrice,costPrice,gender,size,subcategory,category,brand,description,item,itemId,schema,collection,$__handleSave,$__save,$__delta,$__version,increment,$__where,remove,model,on,once,emit,listeners,removeListener,setMaxListeners,removeAllListeners,addListener,$__buildDoc,init,$__storeShard,hook,pre,post,removePre,removePost,_lazySetupHooks,update,set,$__shouldModify,$__set,getValue,setValue,get,$__path,markModified,modifiedPaths,isModified,$isDefault,isDirectModified,isInit,isSelected,validate,$__validate,validateSync,invalidate,$markValid,$isValid,$__reset,$__dirty,$__setSchema,$__getArrayPathsToValidate,$__getAllSubdocs,$__registerHooksFromSchema,$__handleReject,$toObject,toObject,toJSON,inspect,toString,equals,populate,execPopulate,populated,depopulate,$__fullPath
[object Object],false,,[object Object],"function () {
var self = this
, hookArgs // arguments eventually passed to the hook - are mutable
, lastArg = arguments[arguments.length-1]
, pres = this._pres[name]
, posts = this._posts[name]
, _total = pres.length
, _current = -1
, _asyncsLeft = proto[name].numAsyncPres
, _asyncsDone = function(err) {
if (err) {
return handleError(err);
}
--_asyncsLeft || _done.apply(self, hookArgs);
}
, handleError = function(err) {
if ('function' == typeof lastArg)
return lastArg(err);
if (errorCb) return errorCb.call(self, err);
throw err;
问题在于allItems
是Mongoose文档的集合,而不是普通的javascript对象。您可以使用转换这些对象,或者只需将选项添加到查询中:
module.exports.downloadItemCsv = function(req, res){
Item.find({})
.sort({date:-1})
.lean()
.exec(function(err, allItems){
...
});
};
问题在于allItems
是Mongoose文档的集合,而不是普通的javascript对象。您可以使用转换这些对象,或者只需将选项添加到查询中:
module.exports.downloadItemCsv = function(req, res){
Item.find({})
.sort({date:-1})
.lean()
.exec(function(err, allItems){
...
});
};
嗨,Cviejo,感谢以上反馈;今天晚些时候我会测试这个。您能告诉我为什么在将“allItems”登录到控制台时问题不明显吗?到目前为止,我通常都是这样知道自己在做什么的。最好能理解为什么它不能给出真实的画面。当然。长话短说:console.log
将打印该特定对象的toString()
的任何实现的结果。因此,在内部,当您对mongoose文档调用toString()
时,它会将所有相关数据从mongoose方法和属性中分离出来并返回。您正在使用的这个库,babyparse
/papaparse
,正在解析对象,它无法判断哪些属性与mongoose相关或不相关,这是您看到的意外输出。添加.lean()
非常有效。感谢您在其目的背后遗漏的部分/解释。嗨,Cviejo,感谢上面的反馈;今天晚些时候我会测试这个。您能告诉我为什么在将“allItems”登录到控制台时问题不明显吗?到目前为止,我通常都是这样知道自己在做什么的。最好能理解为什么它不能给出真实的画面。当然。长话短说:console.log
将打印该特定对象的toString()
的任何实现的结果。因此,在内部,当您对mongoose文档调用toString()
时,它会将所有相关数据从mongoose方法和属性中分离出来并返回。您正在使用的这个库,babyparse
/papaparse
,正在解析对象,它无法判断哪些属性与mongoose相关或不相关,这是您看到的意外输出。添加.lean()
非常有效。感谢您在其目的背后遗漏的部分/解释。