2

这是我正在尝试将数据下载为 CSV 文件的 REST API。

(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {

    var data = '\n'; // workaround to separate <xml> start tag on first line
    data += 'Firstname,Lastname,Username' + '\n';
    data += 'Nikhil,vartak,niksofteng' + '\n';
    data += 'Unknown,person,anonymous' + '\n';

    response.setHeader("Content-Disposition", "attachment;filename=Xyz.csv");
    response.setContentType("text/csv");
    response.setBody({'data':data});

})(request, response);

根据文档 setBody需要一个 JS 对象,因此如果我只传递data变量,我会收到错误消息,指出数据无法解析为ScriptableObject.

因此,使用当前代码,我得到以下响应:

{
  "result": {
    "data": "\nFirstname,Lastname,Username\nNikhil,vartak,niksofteng\nUnknown,person,anonymous\n"
  }
}

生成的 CSV 如下所示:

在此处输入图像描述

知道如何摆脱第一行和第五行的 XML 标记吗?

4

1 回答 1

2

setBody 方法需要一个 Javascript 对象,然后它将根据客户端通过 Accept 标头告诉它的内容将其序列化为 JSON 或 XML。

在您的情况下,您想生成自己的序列化格式:CSV。所以不要使用 setBody 方法,而是使用流写入器接口直接写入响应流。

response.setContentType("text/csv");
response.setStatus(200);
var writer = response.getStreamWriter();

writer.write('Firstname,Lastname,Username\n');
writer.write('Nikhil,vartak,niksofteng\n');

等等

请注意,您必须自己处理 CSV 格式的所有细节,包括正确编码任何特殊字符,例如如果您希望字段包含逗号,如“Nik,hil”。

干杯,

赛拉斯

于 2017-05-13T17:00:55.323 回答