![](/img/trans.png)
[英]How do you prevent a javascript object from being converted into a length 1 array of objects?
[英]How to prevent an array of unit length in POST body from being converted to a string?
在 node.js 中,我使用这里的代码来提取 POST 数据。
那是:
var qs = require('querystring');
function (request, response) {
if (request.method == 'POST') {
var body = '';
request.on('data', function (data) {
body += data;
request.connection.destroy();
});
request.on('end', function () {
var post = qs.parse(body);
console.log(post.foo);
});
}
}
我正在使用 Python requests 库发出请求。 当数组foo
有多个元素时,输出符合预期。
requests.post(url, data={'foo': ['bar', 'baz']})
给出['bar', 'baz']
然而,如果数组中只有一个元素,变量foo
就会变成一个字符串!
requests.post(url, data={'foo': ['bar']})
给出bar
而不是['bar']
。
我不想做这样的事情:
if (typeof post.foo === 'string')
post.foo = [post.foo]
确保客户端只发送数组。
查询字符串格式没有“数组”的概念。
您正在使用的库只会在给定数据数组时将重复的键插入到结果中。 这是标准做法。
所以:
requests.post(url, data={'foo': 'one-value-only', 'bar': ['first-value', 'second-value']})
会给你:
foo=one-value-only&bar=first-value&bar=second-value
然后你用 JavaScript 解析它。 您可以从正在使用的库中查看源代码。 如果它获得具有给定名称的第二个键,它会用一个数组替换它返回的值。
该代码中没有任何内容为您提供始终返回数组的选项。
这给您留下了三个选择:
obj[k] = [v];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.