qs库的使用

news2024/11/26 16:33:19

前言

         qs是一个流行的查询参数序列化和解析库。可以将一个普通的object序列化成一个查询字符串,或者反过来可以将一个查询字符串解析成一个object,而且支持复杂的嵌套。在工作中,最经常使用qs的地方就是请求参数格式转换的时候,但是有次偶然发现,qs其实是一个很好用的库。在对一些数据的处理上,使用原生js可能会比较麻烦,但是在qs中已经封装了很多好用的方法。接着往下看吧~让我们在数据处理上,游刃有余~

常用的查询字符串和对象之间的转换

   //将url参数转成object对象
   var str="page=1&&pageSize=10"
   let obj=qs.parse(str)
   console.log(obj)//{page: '1', pageSize: '10'}

   // 将对象转成url参数格式
   let str1=qs.stringify(obj)
    console.log(str1)//page=1&pageSize=10
   
    // json字符串转成对象
    let str2='{"name":"zs","age":18}'
    let obj1=JSON.parse(str2)
    console.log(obj1)//{name: 'zs', age: '18'}

常用参数

1.ignoreQueryPrefix

ignoreQueryPrefix这个参数可以自动帮我们过滤掉location.search前面的?,然后再进行解析。

2.addQueryPrefix

addQueryPrefix设置为true可以在序列化的时候给我吗加上?

  // 解析
  console.log(qs.parse('?x=1&y=2'))//{?x: '1', y: '2'}
  console.log(qs.parse('?x=1&y=2', { ignoreQueryPrefix: true }))//{x: '1', y: '2'}

  // 序列化
  console.log(qs.stringify({ x: 1, y: 2 }))//x=1&y=2
  console.log(qs.stringify({ x: 1, y: [2, 3] }))//x=1&y=2&y=3
  console.log(qs.parse({x:1},{addQueryPrefix:true}))//?x=1

3.delimiter

 delimiter可以控制将哪种字符作为分隔符,由于cookie的格式是使用;来分隔。以下是解析cookie的例子:

  document.cookie // 
  let str="_ga=GA1.2.806176131.1570244607; _jsuid=1335121594; _gid=GA1.2.1453554609.1575990858"
  console.log(qs.parse(str, {delimiter:'; '}))

数组解析和序列化

数组序列化有几种方式:induices、brackets、repeat、comma,用来控制字符串的生成格式。来看下面的例子:

  qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' })//a[0]=b&a[1]=c
  qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' })//a[]=b&a[]=c
  qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' })//a=b&a=c
  qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'comma' })//a=b,c

上面的四种方式,序列化得到的结果越来越精简,但是当面对嵌套数组时,却会导致不同程度的数据丢失,而且丢失的越来越严重。

数字类型的解析

把一个数字序列化再还原,得到的并不是一个数字,而是一个字符串

  console.log(qs.parse(qs.stringify({ a: 1 })))//{a: '1'}

如果希望解析出来的依旧是数字,可以参考这个issue,写一个自动以的decoder:

Qs.parse('x[0]=1', {
    decoder(str, defaultEncoder, charset, type) {
      if (/^(\d+|\d*\.\d+)$/.test(str)) {
        return parseFloat(str)
      }
      return str
    }
  })

若需要解析中文,则可以进行如下操作

 if (/^%[A-Za-z0-9+/]/.test(str)) {
      return decodeURIComponent(str)
 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/780541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT通过TCP协议发送结构体数据

文章目录 前言1. memcpy方式1.1 发送整个结构体1.2 发送部分数据 2. QDataStream2.1 符号<<2.2 wrieteRawData 总结 前言 做上位机的时候下发数据&#xff0c;数据是一个结构体&#xff0c;这里就阐述一下怎么通过TCP协议发送结构体。 我自己写的时候主要通过两种方式&a…

K8S初级入门系列之五-Pod的高级特性

一、前言 前一篇我们了解了Pod的基本概念和操作&#xff0c;本篇我们继续研究Pod的一些高级特性&#xff0c;包括Pod的生命周期&#xff0c;pod探针&#xff0c;pod的调度等。 二、生命周期 1、Pod的生命周期 Pod的生命周期示意图如下&#xff1a; 挂起(Pending)&#xff0c…

webpack配置externals汇总

webpack5.88.1 vue2.7.14 vue-router3.6.5 element-ui2.15.13 ant-design-vue1.7.8 externals用于提取第三方依赖包&#xff0c;使用cdn资源的方式将第三方依赖包引入项目&#xff0c;可以大大减少项目打包体积 配置externals对象有技巧&#xff1a; key 就是 import aaa from …

No3: 学习过程中故障成长积累

文章目录 故障积累1、编码错误导致 故障积累1、编码错误导致

JDK8,JDK11,JDK17,JDK21及中间版本主要更新特性

一、版本roadmap图 官方地址&#xff1a; https://www.oracle.com/java/technologies/java-se-support-roadmap.html 从上图可以很清晰得可以看出&#xff0c;JDK7,JDK8,JDK11,JDK17,JDK21是长期维护的版本。从目前来看&#xff0c;JDK8到2023年已经有将近10年的历史了&#…

C++笔记之使用STL的function实现回调机制

C笔记之使用STL的function实现回调机制 code review! 文章目录 C笔记之使用STL的function实现回调机制1.使用普通函数2.使用匿名函数&#xff08;Lambda表达式&#xff09;3.使用函数对象&#xff08;functor&#xff09;4.运行输出 1.使用普通函数 代码 #include <funct…

【C++杂货铺】运算符重载

目录 前言一、运算符重载二、赋值运算符重载三、完善日期类3.1 重载关系运算符3.2 重载、3.3 重载-、-3.4 重载、--3.5 重载<<、>> 四、const成员五、取地址及const取地址操作符重载 前言 本文将以日期类为基础&#xff0c;去探寻运算符重载的特性与使用方法&…

小程序如何删除/修改/上下架分类

删除、修改或上下架小程序中的分类可以帮助商家更好地管理和调整分类展示。下面将介绍如何在小程序中删除、修改或上下架分类的操作步骤。 在小程序管理员后台->分类管理&#xff0c;可以看到处于上架和下架状态的分类。 删除&#xff1a;点击分类上的删除按钮&#xff0c;…

vscode使用g++编译.c文件或.cpp文件

vscode是一个跨平台、轻量级、插件非常丰厚的IDE&#xff0c;这里介绍在vscode里使用g来编译.cpp文件。g也叫GCC, 在Window中&#xff0c;是使用MinGW方式实现g的&#xff0c;它分为32位和64位2个版本&#xff0c;其中&#xff0c;MinGW-64是64位的&#xff0c;MinGW-32是32位的…

qt MainWindow设置layout失效

错误的做法&#xff1a;直接把layout设置到MainWindow上 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);QVBoxLayout *mainLayout new QVBoxLayout();QPushButton *btn1 new QPushButton("aa", t…

VRIO模型

VRIO模型 由美国学者Jay B.Barney 1991年在《企业资源和持续竞争优势》中提出的&#xff0c;是一个战略规划工具&#xff0c;一般用于评估和分析企业的内部资源&#xff0c;并利用这些资源获得持续的竞争力。 模型介绍 该模型指出了有四个因素对持久的竞争优势产生了影响&…

【技术面试】Java八股文业余选手-上篇(持续更新)

文章目录 1. Java 基础【√】1.1 数据结构&#xff1a;集合 Set Map List Array Tree【√】1.2 基础算法&#xff1a;排序算法、二分算法、银行家算法、最短路径算法、最少使用算法、一致性哈希算法【√】1.3 Thread【】1.4 代理、反射、流操作、Netty【√】1.5 JVM 原理【√】…

前端学习——Vue (Day2)

指令补充 指令修饰符 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevi…

PHP登陆/php登录--【强撸项目】

强撸项目系列总目录在000集 PHP要怎么学–【思维导图知识范围】 文章目录 本系列校训本项目使用技术 上效果图phpStudy 设置导数据库 项目目录如图&#xff1a;页面代码后台代码 这么丑的界面能忍&#xff1f;配套资源作业&#xff1a; 本系列校训 用免费公开视频&#xff0…

day01_springboot综合案例

springboot项目 课程目标 1. 【掌握】SSM整合 2. 【掌握】使用SSM完成查询 3. 【理解】AdminLTE 4. 【理解】理解SSM综合案例表的结构springboot环境搭建 搭建工程 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http…

docker数据网络管理

数据管理 管理 Docker 容器中数据主要有两种方式&#xff1a;数据卷&#xff08;Data Volumes&#xff09;和数据卷容器&#xff08;DataVolumes Containers&#xff09;。 1&#xff0e;数据卷 数据卷是一个供容器使用的特殊目录&#xff0c;位于容器中。可将宿主机的目录挂…

20230723红米Redmi Note8Pro掉在水里的处理步骤

20230723红米Redmi Note8Pro掉在水里的处理步骤 2023/7/23 18:18 百度搜搜&#xff1a;小米手机进水 破音怎么处理 Redmi Note8Pro 6400万全场景四摄 液冷游戏芯 4500mAh长续航 NFC 18W快充 红外遥控 https://www.zhiliancy.com/a/q5podmr12.html 首页 / 热文 / 内容 小米喇叭…

CI流水线中Jenkins应用实践丨IDCF

作者&#xff1a;达日汗&#xff0c;中国农业银行研发中心&#xff0c;系统支持部 CI &#xff08;Continuous Integration&#xff09;在维基百科中的定义是&#xff1a;经常将几个小改动合并到一个主分支中&#xff0c;强调开发人员提交了新代码之后&#xff0c;立刻进行构建…

大数据学习05-Kafka分布式集群部署

系统环境&#xff1a;centos7 软件版本&#xff1a;jdk1.8、zookeeper3.4.8、hadoop2.8.5 本次实验使用版本 kafka_2.12-3.0.0 一、安装 Kafka官网 将安装包上传至linux服务器上 解压 tar -zxvf kafka_2.12-3.0.0.tgz -C /home/local/移动目录至kafka mv kafka_2.12-3.0…

十二.Redis模拟集群搭建

配置环境 查看环境信息 127.0.0.1:6379> info replication #查看当前redis的信息 # Replication role:master #角色 master主机 connected_slaves:0 #从机数量为0 master_failover_state:no-failover master_replid:115f37a0ec195680ef754d6915738b0c0a05f450 master_replid…