将JSON对象转换为CSV并将其保存到文件

用户按下button,它使用NodeJS对我的数据库执行SQL查询,结果是一个JSON对象(一个包含对象的数组)。 之后,结果必须保存在一个文件中(用户需要该文件)。

问题:它不能是一个JSON。 格式是由simbol“ ; ”分隔的值和每行一个对象。

我需要创build的文件内容的示例(它就像一个CSV):

1;tree;green 2;car;red 3;Robert's house;white 

这个结果查询有大约18000行。 它很大。

我正在使用replace方法,但我有与罗伯特的房子 simbol像值的问题,因为控制台解释为string的开始。

然后在客户端使用:

 $window.open('data:text/csv,' + encodeURIComponent(myString)); 

这里的符号开始了这个问题。

我想知道如何将JSON转换为该格式(在NodeJS下)以及如何创build该文件。

用双引号表示你的string,然后你可以在里面使用单引号。例如:

 var sql = "SELECT * FROM table WHERE USER='John'"; 

现在,为了避免逐字读取字符,从而导致单引号出现问题,请使用.split(“;”)方法,该方法将首先将行分割为单独的单词,然后将其分配给CSV列

编辑:我写了一个代码,读取一个.json文件(你从数据库,同样的事情),它输出CSV文件。

 var fs = require('fs'); var obj = JSON.parse(fs.readFileSync("data.json", "utf-8")); var stream = fs.createWriteStream("data.csv"); stream.once('open', function(fd){ for (var i = 0; i < obj.person.length; i++) { var string = obj.person[i].id + ";" + obj.person[i].name + ";" + obj.person[i].age + "\n"; stream.write(string); } stream.end(); }); 

然后你可以用CSV文件做你想做的事情。

编辑:如问,这里是我如何发送文件在我的项目之一:

 router.get('/download/:name', function (req, res, next) { var file = './public/data/' + req.params.name; //file is saved in /public/data first var filename = path.basename(file); var mimetype = mime.lookup(file); res.setHeader('Content-disposition', 'attachment; filename=' + filename); res.setHeader('Content-type', mimetype); var filestream = fs.createReadStream(file); filestream.pipe(res); });