![](/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.