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

时间:2017-02-21 18:13:25

标签: angularjs json node.js

用户按下按钮,它使用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下)以及如何创建文件。

1 个答案:

答案 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);
});