JSON至CSV不会跳过字符串中的逗号

时间:2019-01-08 09:21:06

标签: javascript csv

我想在服务器上实现从JSON到CSV的格式,但是由于逗号是我的分隔符,因此我面临包含逗号的条目的问题。

这导致某些内容不在相应的列中。

当逗号位于条目中时,如何跳过逗号,

谢谢

function convertArrayOfObjectsToCSV(args) {
    var result, ctr, keys, columnDelimiter, lineDelimiter, data;

data = args.data || null;
if (data == null || !data.length) {
    return null;
}

columnDelimiter = args.columnDelimiter || ',';
lineDelimiter = args.lineDelimiter || '\n';

keys = Object.keys(data[0]);

result = '';
result += keys.join(columnDelimiter);
result += lineDelimiter;

data.forEach(function (item) {
    ctr = 0;
    keys.forEach(function (key) {
        if (ctr > 0) result += columnDelimiter;

        result += item[key];
        ctr++;
    });
    result += lineDelimiter;
});
return result;
}


function downloadCSV(args) {
var data, filename, link;
var csv = convertArrayOfObjectsToCSV({
    data: activitesExport
});
if (csv == null) {
    console.log("CSV null");
    return;
}

filename = args.filename || 'export.csv';

if (!csv.match(/^data:text\/csv/i)) {
    csv = 'data:text/csv;charset=utf-8,' + csv;
}
data = encodeURI(csv);

link = document.createElement('a');
link.setAttribute('href', data);
link.setAttribute('download', filename);
link.click();
}

有关我的数据的示例:

{ "-LSKp07UQ7TAEXYxK6Li" : { "activiteId" : "-LSKp07UQ7TAEXYxK6Li", "adresseCodePostal" : "38340", "adresseVille" : "VOREPPE", "adresseVoie" : " 517 rue de Nardan", "ageMaximum" : "", "ageMinimum" : "", "categorie" : "CULTURE", "description" : "l’Arrosoir est un équipement destiné à accueillir de nombreux événements festifs et culturels tout au long de l’année.", "divers" : "", "horaires" : "Horaires divers en fonction des événements", "illustration" : "https://firebasestorage.googleapis.com/", "indoor" : true, "latitude" : 45.2916646, "longitude" : 5.6349276, "nom" : "L’arrosoir", "outdoor" : false, "siteWeb" : "", "tarifs" : "En fonction de la manifestation", "telephone" : "0476504747" }, "-LSKpWYf9fPaBjtU578e" : { "activiteId" : "-LSKpWYf9fPaBjtU578e", "adresseCodePostal" : "38340", "adresseVille" : "VOREPPE", "adresseVoie" : "Rue Jean Achard,", "ageMaximum" : "", "ageMinimum" : "", "categorie" : "LOISIRS", "description" : "Deux terrains de 4 jeux pour la boule lyonnaise ou la pétanque.", "divers" : "", "horaires" : "Accès libre ", "illustration" : "https://firebasestorage.googleapis.com/", "indoor" : false, "latitude" : 45.296335, "longitude" : 5.6363899, "nom" : "Gradins de la verronière", "outdoor" : true, "siteWeb" : "https://www.voreppe.fr/article/terrains-de-boule", "tarifs" : "gratuit", "telephone" : "0476504747" } }

1 个答案:

答案 0 :(得分:0)

我不得不对大数据文本行做一些非常相似的事情 我建议使用这个库 https://www.npmjs.com/package/csv-stringify

这是我编写的使用csv-stringify从“脏”数组创建CSV的函数

export const convertToCSV = (output: string[][]) => {
    return new Promise ((resolve,fail) => {
        stringify(output, (err, outputData) => {
            if (!err) {
                resolve(outputData as string[][]);
            } else {
                fail(err);
            }
        });
    })
}