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

问题描述 投票:0回答:1

我有一个类型的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]使用字符串值

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

提前致谢!

javascript json serialization
1个回答
0
投票

正如之前在评论中所说,我想知道CSV是否无法满足您的需求。这很容易解析。这会工作(假设filters是你的阵列)? :

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

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

© www.soinside.com 2019 - 2024. All rights reserved.