【问题标题】:Adding SQL query to JSON Payload将 SQL 查询添加到 JSON 有效负载
【发布时间】:2020-12-25 22:47:20
【问题描述】:

我需要以 JSON 格式将 SQL 查询发送到 REST API,它适用于简单查询,但我正在尝试将 WHERE 子句与 IN 运算符一起使用。如果我对值进行硬编码,它可以在 Postman 中工作,但是当我将 Input 数组传递给 IN 运算符时,它似乎没有按预期工作。

var servers = ['Server-1','Server-2'];
var requestBody = {};
requestBody.Script = 'SELECT ID, NAME, FQDN FROM SERVER WHERE Name IN ('+servers+')';
gs.log("Advanced Request3 Body: "+JSON.stringify(requestBody));

这是输出:

{"Script":"SELECT ID, NAME, FQDN FROM SERVER WHERE Name IN (Server-1,Server-2)"}

这是预期的输出:如果传递数组有任何问题,任何人都可以帮忙。

{"Script":"SELECT ID, NAME, FQDN FROM SERVER WHERE Name IN ('Server-1','Server-2')"}

【问题讨论】:

  • 那么您需要转义您在该字符串中插值的值。但真正的 API(我不会将其称为“REST”)绝对不应该接受 SQL。这不仅仅是SQLI,它只是一扇敞开的前门。
  • 我正在调用云中心化端点来获取服务器详细信息“/Redrock/query”,其中有效负载应该有查询以返回结果。

标签: javascript json rest


【解决方案1】:

您可以使用Array.map 转义数组中每个元素的单引号:

var serversEscaped = servers.map(function(el) { return '\'' + el + '\''; });

然后使用Array.join生成一个带逗号的字符串:

var query = serversEscaped.join(', ');

您的整个代码如下所示:

var servers = ['Server-1','Server-2'];
var requestBody = {};
var serversEscaped = servers.map(function(el) { return '\'' + el + '\''; });
var query = serversEscaped.join(', ');

requestBody.Script = 'SELECT ID, NAME, FQDN FROM SERVER WHERE Name IN ('+ query +');'
console.log(JSON.stringify(requestBody));

【讨论】:

    猜你喜欢
    • 2016-12-29
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多