【问题标题】:Object to CSV format and Export in JavaScript对象为 CSV 格式并在 JavaScript 中导出
【发布时间】:2020-06-10 07:21:27
【问题描述】:

导出为 CSV 后,大字符串正在获取并重写其他单元格屏幕截图 Result of export

链接到 jsfiddle 代码 enter link description here 问题是如何在不影响其他单元格数据的单元格中保留 lar 字符串

var newS = {
        Name: "https://www.someweb.com/product/2019-new-shoulder-bags-leather-bucket-bag/452346283.html?d1_posid=6c776030d97bebe241c60070a53e7683&dspm=pcen.hp.relatedviewed.3.qJcEmZmc4A8ZV2ksdlct&resource_id=452346283#hp1507_reit-3-5|null:2001:r1045009996.json",
        rating: "Google Inc",
        rating: "Google Inc",
        Price: "554.52"
    }
stockData.push(newS);
}

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;
}

【问题讨论】:

    标签: javascript json csv


    【解决方案1】:

    问题不在于您向我们展示的部分,而在于仅包含在您的小提琴中的实际 downloadCSV 函数。

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

    encodeURI 在为 URL 上下文正确编码数据时几乎从来都不是正确的选择。

    这需要改用encodeURIComponent - 但因为这也会对data:text/csv;charset=utf-8, 中的字符进行编码,所以这两个步骤也需要以相反的顺序发生:

    csv = encodeURIComponent(csv)
    csv = 'data:text/csv;charset=utf-8,' + csv;
    data = csv; // keept this, so the rest of your code can still work with the data variable
    

    https://jsfiddle.net/vky7b5dg/

    我在这里删除了 if 条件 - 如果数据在开始时已经包含 data:text/csv,那么它无论如何都不会工作。然后需要在 URL 编码发生之前将其删除,然后再添加。这个函数看起来很通用,但看起来你不需要这个部分来满足你的特定用例。


    (当然,这仍然完全没有对 CSV 上下文的数据进行任何适当的转义。如果您的任何数据字段曾经包含 ,,这仍然会搞砸。但是,这是convertArrayOfObjectsToCSV 函数,而不是这个处理下载部分的函数。)

    【讨论】:

    • 我只是想添加一个更大的字符串,但我再次破坏了代码 jsfiddle.net/6Lntvh0u/1 我有点不明白 CSV 导出有一些限制
    • 这不是因为字符串“更长”,而是因为我最后所说的 - 你的函数 convertArrayOfObjectsToCSV 不处理分隔符的转义,当它出现在 数据,正确。
    • 是的,我读了你的回复两次)但是我怎么能解决它我被卡住了..?
    • 仍然卡住我不明白如何升级现有代码以使其按计划工作
    猜你喜欢
    • 1970-01-01
    • 2012-06-30
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 2023-02-15
    相关资源
    最近更新 更多