【问题标题】:Create Downloadable csv file form JSON创建可下载的 csv 文件格式 JSON
【发布时间】:2020-10-01 03:37:28
【问题描述】:

我正在尝试创建一个 csv 文件,我可以使用我从以前的问题中找到的一些代码从我的网页下载该文件,但是当某些项目具有单一特征时,我遇到了问题,例如today's

数据来自我使用 API 调用的 MySQL 数据库,然后我使用一些函数转换为 csv。

我用来获取初始数据的代码如下:

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => "api_endpoint",
));

$response = curl_exec($curl);
$err = curl_error($curl);

$obj = json_decode($response, true);
curl_close($curl);

?>
<script>

var js_data = '<?php echo json_encode($obj); ?>';
var js_obj_data = JSON.parse(js_data);

</script>

我用来转换成csv的函数如下:

function convertToCSV(objArray) {

    var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;

    var str = '';

    for (var i = 0; i < array.length; i++) {
        var line = '';
        for (var index in array[i]) {
            if (line != '') line += ','
            var item = array[i][index]
            line += array[i][index];
        }

        str += line + '\r\n';
    }

    return str;
}




function exportCSVFile(items, fileTitle) {

  var headers = {
      race_id: 'race_id Model',
      meeting_date: "meeting_date",
      time: "time",
      course: "course",
      name: "name",
      back_price: "back_price",
      probability: "probability",
      qs_price: "qs_price"
  };

  if (headers) {
      items.unshift(headers);
  }


    var csv = this.convertToCSV(items);

    var exportedFilenmae = fileTitle + '.csv' || 'export.csv';


    var blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
    if (navigator.msSaveBlob) { // IE 10+
        navigator.msSaveBlob(blob, exportedFilenmae);
    } else {
        var link = document.createElement("a");
        if (link.download !== undefined) { // feature detection
            // Browsers that support HTML5 download attribute
            var url = URL.createObjectURL(blob);
            link.setAttribute("href", url);
            link.setAttribute("download", "tissue_prices.csv");
            link.style.visibility = 'hidden';
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
        }
    }
}



var fileTitle = 'tissue_prices';

然后使用以下方法调用函数:

exportCSVFile(js_obj_data, fileTitle);

js_obj_data 的示例如下

   {
    "race_id": 123456,
    "meeting_date": "11/6/2020",
    "time": "16:00",
    "course": "Gowran_Park",
    "name": "Cap D'antibes",
    "back_price": 8.4,
    "probability": 5,
    "qs_price": 20.77
  }

我在控制台的这一行收到unexpected identifier 错误。如果我删除此记录,它会正常工作吗?

如果我删除上述记录,那么我会得到预期的输出,它是唯一在其中一个字段中带有单引号的记录。 如果我删除除该记录之外的所有记录,这就是我得到的错误:

js_data = '[{"race_id":940558,"meeting_date":"11\/6\/2020","time":"16:00","course":"Gowran_Park","name":"Cap D'antibes","back_price":8.4000000000000003552713678800500929355621337890625,"probability":5,"qs_price":20.769999999999999573674358543939888477325439453125}]

奇怪的是这些值怎么这么长,因为我用 2 个小数将它们加载到我的数据库中,而且我还使用 decimal(8,2) 作为数据类型。

感谢任何帮助。

【问题讨论】:

  • 出于好奇,您这样做var jsonObject = JSON.stringify(items);,但随后您在convertToCSV 中做的第一件事是JSON.parse(objArray)
  • 我在控制台的这一行收到了一个意外的标识符错误。不清楚您在这里指的是哪一行?
  • CSV 是一种糟糕的格式,正是因为引号的处理。我强烈建议您使用一个好的库来为您生成 CSV,而不是自己编写。如果您确实想自己编写,请找到一个体面的 CSV 规范,该规范指定如何处理所有这些异常。
  • 在您添加的代码中,js_data 是一个字符串,并且您使用 ' 作为字符串分隔符。那是您的问题,因为您的字符串已经包含'。 (而且你也错过了结束')。如果你需要js_data 是一个字符串,那么你需要使用\' 正确地转义你的字符串。即js_data = '[{"race_id":940558,"meeting_date":"11\/6\/2020","time":"16:00","course":"Gowran_Park","name":"Cap D\'antibes","back_price":8.4000000000000003552713678800500929355621337890625,"probability":5,"qs_price":20.769999999999999573674358543939888477325439453125}]'
  • 您所说的语法错误意味着您使用了无效的 javascript 语法。马特提到的单引号问题会引发这种情况。使用反引号js_data=`[ {} ]`

标签: javascript


【解决方案1】:

我在这里发现了类似的问题

[php json_encode & jquery parseJSON single quote issue

改变这个: var js_data = '&lt;?php echo json_encode($obj); ?&gt;';到这个 var js_data = '&lt;?php echo json_encode($obj, JSON_HEX_APOS); ?&gt;'; 解决了问题

感谢大家的帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    相关资源
    最近更新 更多