自定义查询参数格式序列化器和提取器[JS]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义查询参数格式序列化器和提取器[JS]相关的知识,希望对你有一定的参考价值。
我有一个类型的JSON对象
[
{
at: "own",
op: "in_between",
va: ["str", "jan"]
},
{
a: 'alas',
op: 'cont',
va: [10, 20]
},
.
.
.
]
我想将其作为GET查询参数传递。现在我可以将其字符串化并将其传递给像这样的东西
?q={"0":{"at":"own","op":"in_between","va":["str","jan"]},"1":{"at":"alas","op":"cont","va":[10,20]}}
但是我更愿意以不同的格式序列化它。就像是
q[]=at:"own"|op:"in_between"|va:["str","jan"]&q[]=at:"alas"|op:"cont"|va:[10,20]
(我看到亚马逊的搜索过滤器使用了这种格式。欢迎任何其他格式的建议。我的主要目标是缩短网址)
所以我能够通过连接到一个字符串来序列化它
let q = "";
data.forEach(function(i) {
q = q.concat(`q[]=at:"${i.at}"|op:"${i.op}"|va:[${i.val}]&`);
});
return q.slice(0,-1);
同样我有一个提取器
let qArray = q.split('&');
let qParse = [];
qArray.forEach(function(i) {
i = JSON.parse('{' + i.substring(4).split('|').join(',') + '}');
q.push(i);
});
然而,这仅适用于q [1],其中q [1] ['va']具有整数数组。它还需要对q [0]使用字符串值
还有哪种更好的方法可以在这些形式中序列化和提取它?
提前致谢!
答案
正如之前在评论中所说,我想知道CSV是否无法满足您的需求。这很容易解析。这会工作(假设filters
是你的阵列)? :
let params = "?q=;at,op,va;";
filters.forEach(function(fil) {
params += fil.at + "," + fil.op + "," + JSON.stringify(fil.va) + ";";
})
如果要存储查询以生成百分比,则只需删除前三个字符即可。我也假设你所有的词典都遵循相同的结构。希望这对你有用
以上是关于自定义查询参数格式序列化器和提取器[JS]的主要内容,如果未能解决你的问题,请参考以下文章