自定义查询参数格式序列化器和提取器[JS]

时间:2018-03-05 15:59:58

标签: javascript json serialization

我有一个类型为

的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]使用字符串值

还有哪种更好的方式以这些形式序列化和提取它?

提前致谢!

1 个答案:

答案 0 :(得分:0)

正如之前在评论中所说,我想知道CSV是否适合你想要的东西。这很容易解析。这会工作(假设filters是你的数组)? :

let params = "?q=;at,op,va;";
filters.forEach(function(fil) {
    params += fil.at + "," + fil.op + "," + JSON.stringify(fil.va) + ";";
})

如果您想存储查询以赚取百分比,您只需删除前三个字符即可。我还假设你所有的词典都遵循相同的结构。希望这对你有用