【问题标题】:Javascript object with arrays to search param style query string带有数组的 Javascript 对象以搜索参数样式查询字符串
【发布时间】: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


【解决方案1】:

我尝试重新排序您的 json:

> var jsobj = [{origString: 'abc', newString: 'abcd' }, {origString: '123', 
newString: '1234' }, {action:'compare'}]
> qs.stringify(jsobj,{encode:false})
'0[origString]=abc&0[newString]=abcd&1[origString]=123&1[newString]=1234&2[action]=compare'

但我不知道这是否是解决您问题的好方法。

【讨论】:

  • 我自己早些时候在试图弄清楚这一点时遇到了这个想法,最初我认为它不会起作用,因为它有一种数组表示法,但是它让我只使用正则表达式来删除它。 str.replace(/[0-9]\[|]/g,'')) 这将返回我需要的字符串。感谢您帮助我看到这一点。让这个打开,以防万一还有另一种选择。
【解决方案2】:

将此归咎于对应用程序的误解。在花了更多时间使用 API 之后,我意识到我的错误,并且正如其他人在上面发布的那样,顺序无关紧要。不知道为什么我的前几次尝试都失败了,但问题已得到“回答”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 2019-03-24
    • 2011-05-05
    • 2017-09-03
    • 2018-05-19
    相关资源
    最近更新 更多