【发布时间】:2019-01-09 00:05:19
【问题描述】:
寻找将包含数组作为值的 javascript 对象转换为搜索参数兼容的查询字符串的简洁方法。在移动到下一个索引之前从每个数组中序列化一个元素。
使用 querystring 或 qs 等库,可以很好地转换对象,但独立处理每个数组。将结果字符串传递给服务器(我无法更改)会导致处理项目时出错,因为每个先前的值都被下一个值覆盖。不支持在查询字符串中使用任何类型的数组表示法。我没有尝试过的唯一选择是自定义排序函数,但似乎比编写自定义函数来解析对象更糟糕。也欢迎对可生成预期结果的对象进行任何修改。
var qs = require("qs")
var jsobj = {
origString:['abc','123'],
newString:['abcd','1234'],
action:'compare'
}
qs.stringify(jsobj,{encode:false})
qs.stringify(jsobj,{encode:false,indices:false})
qs.stringify(jsobj,{encode:false,indices:false,arrayFormat:'repeat'})
返回的结果是
"origString=abc&origString=123&newString=abcd&newString=1234&action=compare"
期望的结果是
"origString=abc&newString=abcd&origString=123&newString=1234&action=compare"
【问题讨论】:
-
为什么顺序很重要?
-
“在处理项目时导致错误,因为每个前一个值都被下一个覆盖。” 这与查询字符串的顺序有什么关系?似乎服务器无法理解应将具有相同名称的参数放入数组中。服务器上运行的是哪种语言? PHP 在参数名称后需要
[]。 -
服务器正在使用 Java。这是一个写得很糟糕的软件,因此努力解决它。当我尝试使用重复名称且没有
[]的发布请求时,仅检索到最后一个值。使用[]提交只会完全破坏请求。
标签: javascript node.js query-string