首页 > 编程语言 >JavaScript 中URL 查询字符串(query string)的序列与反序列化

JavaScript 中URL 查询字符串(query string)的序列与反序列化

时间:2023-01-10 17:56:13浏览次数:44  
标签:string URLSearchParams URL 查询 let params 序列化 name

方法一:

在 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环境和需要的复杂度来进行选择

 

标签:string,URLSearchParams,URL,查询,let,params,序列化,name
From: https://www.cnblogs.com/yuzhihui/p/17040986.html

相关文章

  • java反序列化从0到cc1
    前言java安全已成为安全从业者必不可少的技能,而反序列化又是Java安全非常重要的一环。又是本文将从0基础开始,带着大家层层递进,从java基础到URLDNS链到最终理解反序列化cc1......
  • 记录--JS-SDK页面打开提示realAuthUrl错误
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助测试环境好好地功能,上了生产,莫名其妙报错,开始以为是没有设置Js安全接口域名,结果让相应人员一查,已经设置了......
  • Python获取URL图片文件的哈希值 hash
    pipinstallPillow importhashlibfromioimportBytesIOdefget_hash(file):""":parambytesfile::return:"""md5hash=hashlib.m......
  • Kali中安装并使用dsniff中的arpspoof和urlsnarf
    简介dsniff是一款很好用的嗅探工具,里面有arpspoof和urlsnarf这两个工具安装apt-getinstalldsniff使用介绍注意:如果没有arpspoof或者说没有dsniff的话,kali会自动提示......
  • MessagePack, Protocol Buffers和Thrift序列化框架原理和比较说明
    ​第1部分 messagepack说明1.1messagepack的消息编码说明为什么messagepack比json序列化使用的字节流更少, 可通过图1-1、图1-2有个直观的感觉。  图1- 1与json的格式对......
  • Brew报错:Version value must be a string; got a NilClass () (TypeError)
    今天使用brew更新软件时,大概是因为太长时间没有更新了,出现了以下错误信息:UpdatingHomebrew...Traceback(mostrecentcalllast): 11:from/usr/local/Homebrew/Libr......
  • 日常开发记录-js的Date对象中的toLocaleDateString()
    就是把Date对象的日期部分转换为字符串,并返回结果。代码示例:console.log(newDate())//2023-01-10T05:42:41.926Zconsole.log(newDate().toLocaleDateString())//......
  • url的path中传入id参数的用法
    一.url"""定义learning_logs的URL模式"""urlpatterns=[#主页url(r'^$',views.index,name='index'),#显示所有的主题url(r'^topics/$',views.to......
  • curl命令查用操作
    curl-o/dev/null-s-w"http_code:%{http_code}http_connect:%{http_connect}content_type:%{content_type}time_dns:%{time_namelookup}time_redirect:%{time_red......
  • Redis的String类型,原来这么占内存
    Redis的String类型,原来这么占内存存一个Long类型这么占内存,Redis的内存开销都花在哪儿了?1、场景介绍假设现在我们要开发一个图片存储系统,要求这个系统能够根据图片......