用户按下按钮,它使用NodeJS对我的数据库执行SQL查询,结果是一个JSON对象(一个带有对象的数组)。之后,结果必须保存在文件中(用户需要文件)。
问题:它不能是JSON。格式只是由simbol“; ”分隔的值和每行一个对象。
我需要创建的文件内容示例(它就像一个CSV):
1;tree;green
2;car;red
3;Robert's house;white
此结果查询大约有18000行。它很大。
我正在使用替换方法,但我在使用simbol '时遇到问题,例如 Robert's house ,因为控制台被解释为开头一串。
然后在客户端我使用:
$window.open('data:text/csv,' + encodeURIComponent(myString));
这里的simbols '会引发问题。
我想知道如何将JSON转换为该格式(在NodeJS下)以及如何创建文件。
答案 0 :(得分:1)
用双引号表示你的字符串“然后你可以在其中使用单引号。例如:
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);
});