JavaScript中JSON对象属性与URL参数之间相互转换实现

JavaScript中JSON对象属性与URL参数之间相互转换实现

文章目录

1. JSON对象转换为URL参数字符串

1. URLSearchParams

URLSearchParams: 详细文档 URLSearchParams接口参考

URLSearchParams 接口定义了一些实用的方法来处理 URL 的查询字符串。

一个实现了 URLSearchParams 的对象可以直接用在 for...of 结构中,以键/值对在查询字符串中出现的顺序对它们进行迭代,例如下面两行是等价的:

JSCopy to Clipboard

js 复制代码
for (const [key, value] of mySearchParams) {
}
for (const [key, value] of mySearchParams.entries()) {
}

具体转换案例如下

js 复制代码
<script>
   //obj对象
    const obj = {
        page: 1,
        size: 10,
        sort: 'id',
        order: 'desc',
        other: null
    };
   //方式1:

   let urlParams = new URLSearchParams(obj).toString()

   console.log(urlParams)
   //输出如下:
   //page=1&size=10&sort=id&order=desc&other=null
</script>

2. Object.keys

如下jsonToQueryString 函数将 JSON 对象转换为 URL 参数字符串。

  1. 遍历 JSON 对象的属性,编码键和值;
  2. 然后拼接成形如 key1=value1&key2=value2 的格式。
js 复制代码
<script>
   function jsonToQueryString(json) {
       return Object.keys(json)
           .map(key => encodeURIComponent(key) + '=' + encodeURIComponent(json[key]))
           .join('&');
   }

   // 示例
   const json = { name: 'zhangSan', age: 30, city: 'beijing' };
   const queryString = jsonToQueryString(json);
   console.log(queryString);
   //输出如下
   // name=zhangSan&age=30&city=beijing
</script>

2. URL参数字符串转换为JSON对象:

如下queryStringToJson 函数将 URL 参数字符串转换为 JSON 对象。

  1. 首先对 URL 参数字符串做处理;
  2. 然后使用 JSON.parse() 方法将其转换为 JSON 对象。
js 复制代码
<script>
   function queryStringToJson(queryString) {
   return JSON.parse('{"' + decodeURI(queryString).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g,'":"') + '"}');
   }

   // 示例
   const queryStr = "name=zhangSan&age=30&city=beijing";
   const queryStrToJson = queryStringToJson(queryStr);
   console.log(queryStrToJson);
   //输出如下
   /*{
       "name": "zhangSan",
       "age": "30",
       "city": "beijing"
   }*/
</script>
     "name": "zhangSan",
       "age": "30",
       "city": "beijing"
   }*/
</script>
相关推荐
小二·8 分钟前
Python Web 开发进阶实战:Flask 项目中的表单验证、错误处理与用户体验优化
前端·python·flask
天荒地老笑话么8 分钟前
IntelliJ IDEA 运行 Tomcat 报错:Please, configure Web Facet first!
java·前端·tomcat·intellij-idea
王五周八8 分钟前
html转化为base64编码的pdf文件
前端·pdf·html
神色自若11 分钟前
vue3 带tabs的后台管理系统,切换tab标签后,共用界面带参数缓存界面状态
前端·vue3
мо仙堡杠把子ご灬12 分钟前
微前端架构实践:避免Vuex模块重复注册的崩溃陷阱
前端
叫我:松哥16 分钟前
基于机器学习的地震风险评估与可视化系统,采用Flask后端与Bootstrap前端,系统集成DBSCAN空间聚类算法与随机森林算法
前端·算法·机器学习·flask·bootstrap·echarts·聚类
赵民勇17 分钟前
JavaScript中的Mixin模式详解
javascript·ecmascript
呆头鸭L20 分钟前
用vue3+ts+elementPlus+vite搭建electron桌面端应用
前端·vue.js·electron
aPurpleBerry20 分钟前
React Hooks(数据驱动、副作用、状态传递、状态派生)
前端·react.js·前端框架
IT_陈寒21 分钟前
2025年React生态最新趋势:我从Redux迁移到Zustand后性能提升40%的心得
前端·人工智能·后端