我有一个类型为
的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]使用字符串值
还有哪种更好的方式以这些形式序列化和提取它?
提前致谢!
答案 0 :(得分:0)
正如之前在评论中所说,我想知道CSV是否适合你想要的东西。这很容易解析。这会工作(假设filters
是你的数组)? :
let params = "?q=;at,op,va;";
filters.forEach(function(fil) {
params += fil.at + "," + fil.op + "," + JSON.stringify(fil.va) + ";";
})
如果您想存储查询以赚取百分比,您只需删除前三个字符即可。我还假设你所有的词典都遵循相同的结构。希望这对你有用