方法一:

在 JavaScript 中,可以使用 URLSearchParams 对象来处理 URL 中的查询字符串。

序列化(将 JavaScript 对象转换为查询字符串)可以使用 URLSearchParams 对象的 append() 方法,如下所示:

let params = new URLSearchParams();
params.append('name', 'John');
params.append('age', '30');
let queryString = params.toString();
console.log(queryString);

反序列化(将查询字符串转换为 JavaScript 对象)可以使用 URLSearchParams 的构造函数,如下所示:

let queryString = "name=John&age=30";
let params = new URLSearchParams(queryString);
console.log(params.get('name')); // "John"
console.log(params.get('age')); // "30"

对于反序列化的操作可以使用URL的search属性,来解析query string

let url = new URL('https://example.com?name=John&age=30');
let params = new URLSearchParams(url.search);
console.log(params.get('name')); // "John"
console.log(params.get('age')); // "30"

需要注意的是,URLSearchParams 对象只能用于处理查询字符串,而不能用于创建或解析整个 URL。

如果需要更高级的处理方式,可以使用其它库或第三方函数库,比如 qs, querystring 等库来处理。

对于反序列化的操作中的URLSearchParams的使用还有一些方法,比如:

  • has(name): 返回一个 Boolean 值,表示是否存在名称为 name 的查询参数。
  • get(name): 返回名称为 name 的查询参数的值,如果不存在,则返回 null。
  • getAll(name): 返回所有名称为 name 的查询参数的值组成的数组,如果不存在,则返回空数组。
  • set(name, value): 设置名称为 name 的查询参数的值为 value。如果已经存在同名参数,将会覆盖原来的值。
  • append(name, value): 添加名称为 name 的查询参数,并设置其值为 value。如果已经存在同名参数,会添加一个新的参数。
  • delete(name): 删除名称为 name 的查询参数。
  • entries(): 返回一个迭代器,遍历所有查询参数的键值对。
  • keys(): 返回一个迭代器,遍历所有查询参数的名称。
  • values(): 返回一个迭代器,遍历所有查询参数的值。

这些方法都能给出更灵活的操作,请根据具体需求来选择使用

方法二:

当然,如果需要手动处理查询字符串,也可以使用 JavaScript 的标准字符串处理函数来实现。

序列化,可以使用下面的代码把一个对象转换为查询字符串:

function objectToQueryString(obj) {
return Object.entries(obj).map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join('&');
}
console.log(objectToQueryString({name: 'John', age: '30'}))

反序列化,可以使用下面的代码把查询字符串转换为一个对象:

function queryStringToObject(queryString) {
let obj = {};
let arr = queryString.split("&");
for(let i = 0; i < arr.length; i++){
let temp = arr[i].split("=");
obj[temp[0]] = temp[1];
}
return obj;
}
console.log(queryStringToObject('name=John&age=30'))

需要注意的是,上述代码使用了 encodeURIComponentdecodeURIComponent 来编码和解码查询字符串中的字符,以防止出现无效或不安全的字符。

这些方法都能达到相同的目的,你可以根据项目中使用的JavaScript环境和需要的复杂度来进行选择

JavaScript 中URL 查询字符串(query string)的序列与反序列化的更多相关文章

  1. 【本周面试题】第1周 - 获取URL中的查询字符串参数、get和post的区别

    [此系列优先解决自己经历的面试题] 2018.11.16 面试题一:你如何获取浏览器URL中查询字符串中的参数? 题目代码: 测试地址为 https://www.sogou.com/tx?query= ...

  2. C# 获取url中的查询字符串参数

    /// <summary> /// 获取url中的查询字符串参数 /// </summary> public static NameValueCollection Extrac ...

  3. 【Win 10 应用开发】分析 URI 中的查询字符串

    分析URI中的字符有K种方法(K >= 2),如果查询字符串中的参数比较简单,可以通过子字符串查找的方式来处理:如果查询字符串相对复杂,你可以使用正则表达式来匹配 key1=value1 ,  ...

  4. querystring 解析url 查询字符串

    对前端同学来说,经常要碰到一种比较麻烦的情况,那就是url查询字符串的解析问题.说起来也不难,就是比较麻烦. 具体来处理这种情况的时候,相信有一部分同学就是针对具体项目中的需要的字符去正则匹配一下,业 ...

  5. JavaScript中常见的字符串操作函数及用法

    JavaScript中常见的字符串操作函数及用法 最近几次参加前端实习生招聘的笔试,发现很多笔试题都会考到字符串的处理,比方说去哪儿网笔试题.淘宝的笔试题等.如果你经常参加笔试或者也是一个过来人,相信 ...

  6. JS如何获取url查询字符串的键和值?

    /** * 根据url查询字符串里的键名获取其值 */function getSearchString(key, search) { // 获取URL中?之后的字符 var str = search; ...

  7. php的URL查询字符串解析函数

    URL查询字符串格式:Data[650][BLN]=40002307312&Data[650][Status]=電聯無人接聽. 解析这种数据使用函数:parse_str(). parse_st ...

  8. JavaScript中,提取子字符串方法:Slice、Substring、Substr的比较。

    在JavaScript中,提取子字符串主要是通过 Slice.Substring.Substr 三个方法之一. // slice // 语法: string.slice(beginSlice [, e ...

  9. Java与JavaScript中判断两字符串是否相等的区别

    JavaScript是一种常用的脚本语言,这也决定了其相对于其他编程语言显得并不是很规范.在JavaScript中判断两字符串是否相等 直接用==,这与C++里的String类一样.而Java里的等号 ...

  10. 黑马旅游网 解析url查询字符串

    function getUrlParam(name) { let reg = new RegExp("(^|&)" + name + "=([^&]*)( ...

随机推荐

  1. 7_vue的数据代理,双向绑定

    回顾 object.defineProperty() 方法 区别 defineProperty == 给对象定义属性用的 需要传递三个基本参数 需要定义属性的对象名 你要定义的属性叫什么名字(比如给p ...

  2. JQuery中的DataTables表格插件

    一.DataTables表格插件的简介 DataTables是一个jQuery的表格插件.它具有以下特点: 自动分页处理 即时表格数据过滤 数据排序以及数据类型自动检测 自动处理列宽度 可通过CSS定 ...

  3. Linux的挖矿木马病毒清除(kswapd0进程)

    1.top查看资源使用情况 看到这些进程一直在变化,但是,主要是由于kswapd0进程在作怪,占据了99%以上的CUP,查找资料后,发现它就是挖矿进程 2.排查kswapd0进程 执行命令netsta ...

  4. Pictionary 方法记录

    [COCI2017-2018#5] Pictionary 题面翻译 题目描述 在宇宙一个不为人知的地方,有一个星球,上面有一个国家,只有数学家居住. 在这个国家有\(n\)个数学家,有趣的是,每个数学 ...

  5. Android开发 对接微信分享SDK总结

    原文:Android开发 对接微信分享SDK总结 - Stars-One的杂货小窝 公司项目需要对接微信分享,本来之前准备对接友盟分享的,但友盟的分享实际参数太多,而我又只需要对接一个微信分享,于是便 ...

  6. 研发效能|DevOps 已死平台工程永存带来的焦虑

    最近某位大神在推特上发了一个帖子,结果引来了国内众多卖课机构.培训机构的狂欢,开始贩卖焦虑,其实「平台工程」也不是什么特别高深莫测的东西.闲得无聊,把这位大神的几个帖子薅了下来,你看过之后就会觉得没啥 ...

  7. 第2-1-2章 传统方式安装FastDFS-附FastDFS常用命令

    目录 3 安装配置 3.1 安装GCC 3.2 安装libevent 3.3 安装libfastcommon 3.4 安装FastDFS 3.5 安装fastdfs-nginx-module 3.5 ...

  8. PYQT5 学习

    zetcode教程 汉化版: https://maicss.gitbook.io/pyqt5-chinese-tutoral/ 官方网站: https://www.riverbankcomputing ...

  9. Sprint产品待办列表的优先级要怎么排?

    在梳理产品待办事项列表的过程中,产品负责人需要先做优先级排列,保证我们 在一定的时间盒内能够交付需要优先级最高.最具价值的用户故事. 那这个用户故事的优先级要怎么排列,我们怎样选择用户故事的实现顺序? ...

  10. Java开发学习(四十一)----MyBatisPlus标准数据层(增删查改分页)开发

    一.标准CRUD使用 对于标准的CRUD功能都有哪些以及MyBatisPlus都提供了哪些方法可以使用呢? 我们先来看张图: 1.1 环境准备 这里用的环境就是Java开发学习(四十)----MyBa ...