如何使用papaparse正确地将对象数组转换为CSV?

时间:2015-07-17 15:04:13

标签: node.js csv papaparse

我正在执行mongdb数据库查询,该查询会下载一个对象数组,然后我想将其转换为CSV。我正在使用babyparse这是节点的papaparse替代版本。

这就是我正在尝试的:

    Player.find({}).
      exec(function(err, players) {
        console.log(players.length);
        var csv = papaparse.unparse(players, {
          quotes: false,
          delimiter: ',',
          newline: '\n'
        });

        response.set({'Content-Type': 'application/force-download',
                      'Content-disposition':'attachment; filename=players.csv'});


        response.send(200, csv);
      });
  }

然而,这不会提供正确的CSV文件,但有些奇怪,例如将csv内容与java脚本函数内容合并。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

使用以下函数展平JSON数据

JSON.flatten = function(data) {
    var result = {};
    function recurse (cur, prop) {
        if (Object(cur) !== cur) {
            result[prop] = cur;
        } else if (Array.isArray(cur)) {
            for(var i=0, l=cur.length; i<l; i++)
                 if(cur[i].constructor === Object)
                 recurse(cur[i], prop + "[" + i + "]");
                 else
                 {

                   if(cur.length > 1)
                    {
                        result[prop] = (result[prop] || "") + cur[i] + ";";
                    }
                    else
                    {
                        result[prop] = cur;
                    }

                 }

            if (l == 0)
                result[prop] = [];
        } else {
            var isEmpty = true;
            for (var p in cur) {
                isEmpty = false;
                recurse(cur[p], prop ? prop+"."+p : p);
            }
            if (isEmpty && prop)
                result[prop] = {};
        }
    }
    recurse(data, "");
    return result;
}

根据您的情况修改:)