如何使用 REST API 下载 CSV?

Nik*_*tak 4 export-to-csv servicenow servicenow-rest-api

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

(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);
Run Code Online (Sandbox Code Playgroud)

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

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

{
  "result": {
    "data": "\nFirstname,Lastname,Username\nNikhil,vartak,niksofteng\nUnknown,person,anonymous\n"
  }
}
Run Code Online (Sandbox Code Playgroud)

生成的 CSV 如下所示:

在此输入图像描述

知道如何去掉第一行和第五行的 XML 标记吗?

小智 5

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');
Run Code Online (Sandbox Code Playgroud)

ETC。

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

干杯,

塞拉斯