You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ServiceNow中JavaScript调用REST API传递数组参数报错如何解决?

ServiceNow 环境JavaScript调用REST API数组入参问题解决方案

问题根因总述

你遇到的三个问题本质都是原始数据处理逻辑错误导致的格式异常:

  • stringify后数组仅含一个带逗号的字符串:说明你操作的原始数组本身就只有1个逗号拼接的字符串元素
  • 出现嵌套数组:是你将split生成的数组又插入了另一个空数组导致
  • 出现多余转义符:是手动拼接带引号的字符串后,再次执行序列化自动转义了引号导致

正确实现步骤

1. 生成符合要求的一维字符串数组

直接对原始逗号拼接字符串执行split操作,不要将返回结果嵌套到其他数组中:

// 你的原始数据源,格式为单个逗号拼接的字符串
const rawStr = "Acid Reflux,Anemia,Asthma,Atrial Fibrillation,Cancer";
// 直接接收split返回的一维数组即可,不要执行arr.push(splitResult)这类操作
const targetArr = rawStr.split(',');
// 校验:此时打印targetArr.length应为6,和你预期的元素数量一致
gs.info('数组元素个数:' + targetArr.length);

2. 构造REST请求直接传入数组

使用ServiceNow标准REST请求工具时,直接将上述数组作为参数值传入请求体,统一执行序列化即可,无需手动处理引号:

try {
  const restMsg = new sn_ws.RESTMessageV2();
  restMsg.setHttpMethod('POST');
  restMsg.setEndpoint('替换为你的API实际地址');
  restMsg.setRequestHeader('Content-Type', 'application/json');

  // 构造请求体对象,直接把生成好的一维数组赋值给对应参数
  const reqBody = {
    // 替换为接口实际要求的参数名
    "medical_conditions": targetArr
  };
  // 统一序列化整个请求体,不会生成多余转义符
  restMsg.setRequestBody(JSON.stringify(reqBody));

  const response = restMsg.execute();
  const statusCode = response.getStatusCode();
  const resBody = response.getBody();
  gs.info('请求响应:' + resBody);
} catch (e) {
  gs.error('接口请求错误:' + e.getMessage());
}

避坑提示

  • 不要手动通过replace等方法给元素拼接引号,JSON.stringify会自动处理字符串元素的引号包裹
  • 序列化前可通过gs.info(JSON.stringify(targetArr))打印数组,确认输出为["Acid Reflux","Anemia","Asthma","Atrial Fibrillation","Cancer"]即符合要求
  • 如果调用的是ServiceNow自带的脚本REST API,也可以直接把数组传入请求参数,无需序列化,平台会自动处理格式

内容的提问来源于stack exchange,提问作者mjdoolit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:06:02