如何";逃逸;POST请求中逗号分隔列表中的逗号

how to "escape" a comma in a comma-separated list in a POST request?

本文关键字:列表 分隔 请求 quot 逃逸 POST 如何      更新时间:2023-09-26

编辑:API开发人员通过使用另一个分隔符并在请求中指定它来提供解决方案(请参阅下面我对自己问题的回答(


我正在向RESTful API发送POST请求,这需要一个由命令分隔的参数列表:

var request = require('request-promise'); //promisified npm request
// the list of names is huge
// those names are stored in a MongoDB database
// the namesList is generated programmatically before the request
var namesList = "name1,name2,name3,name4"
var requestOptions = {
  method: 'POST',
  uri: 'https://myAPI/someEndPoint/',
  body: {
    key: myAccessKey,
    names: namesList
  },
  json: true
};
request(requestOptions)
.then( () => {_do_something_} );

它适用于大多数名称,但其中一些名称包含逗号:

var arrayNames = ["foo bar", "barfoo", "stupid, comma", "dammit"];
// is converted by my code in :
var namesList = "foo bar,barfoo,stupid, comma, dammit";

这不可避免地会导致错误的列表被发送到API。。。那么,当我从数组生成列表时,有没有一种方法可以通过编程方式"转义"错误的逗号?

API开发人员期待已久的答案已经到来(不久前发送了一封电子邮件(,解决方案既简单又高效:只需使用另一个分隔符:

var namesList = "name1;name2;name3;name4" // use ';' instead of ',' here...
var requestOptions = {
  method: 'POST',
  uri: 'https://myAPI/someEndPoint/',
  body: {
    key: myAccessKey,
    names: namesList,
    delimiter: ';' // and specify the delimiter there !
  },
  json: true
};
request(requestOptions)
.then( () => {_do_something_} );

我不知道delimiter字段是这个API的标准字段还是特定字段,但它非常适合我的用例!

您可以遍历正在发送的列表,将逗号括在带双引号的字符串中。然后在服务器端处理这些双引号。这将保持您的列表完整性

使用类似的东西来替换subString:

str = str.replace(/,/g, '","');

在服务器端,您可以忽略所有用双引号括起来的逗号。

尝试

var namesList = arrayNames.map(function(val) { return val.replace(',', ''',');}).toString();