在实际开发过程中,可能会遇到需要将JSON对象转换为URL参数,或者将URL参数转换为JSON对象的场景。比如有一个JSON对象如下:{"type":1,"keyword":"js"}需要转为URL参数:type=1&keyword=js1.将JSON对象转为URL参数有两种将JSON对象转换为URL参数的主要实现方法。一种是遍历JSON对象属性,另一种是使用URLSearchParams,下面结合代码介绍。(1)遍历JSON对象属性使用循环遍历JSON对象的属性,然后将它们拼接在一起。这可能是最容易想到的方法。下面是一个遍历JSON对象属性的实现:functionjsonToUrlParam(json){returnObject.keys(json).map(key=>key+'='+json[key]).join('&');}test让json={“类型”:1,“关键字”:“js”};console.log(jsonToUrlParam(json));输出结果如下:type=1&keyword=js在实际应用场景中,一个JSON对象可能有很多属性,而URL参数只需要部分属性。这时候可以修改上面的方法来忽略指定的属性,如下:1).map(key=>key+'='+json[key]).join('&');}测试忽略类型属性letjson={"type":1,"keyword":"js"};console.log(jsonToUrlParam(json,['type']));输出结果如下:keyword=js(2)URLSearchParams关于URLSearchParams,可以先看看官方https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams的定义URLSearchParams接口定义了一些有用的方法来处理URL查询字符串。简单来说就是用来处理URL上的参数串,即?后面的A=B&C=D&E=F部分的内容,以及字符'?'一开始会被忽略。让我们看看它是如何使用的:functionjsonToUrlParam(json){returnnewURLSearchParams(json).toString();}Testletjson={"type":1,"keyword":"js"};console.log(jsonToUrlParam(json));输出结果如下:type=1&keyword=js2,url参数转换为json对象例如有这样一个url:http://example.com?type=1&key...,其参数部分为type=1&keyword=js,如何将其转换为JSON对象呢?具体实现代码如下:functionurlParamToJson(urlParam){letjson={};urlParam.trim().split('&').forEach(item=>json[item.split('=')[0]]=item.split('=')[1]);returnjson;}测试console.log(JSON.stringify(urlParamToJson('type=1&keyword=js')))输出如下:{"type":"1","keyword":"js"}对于这个方法,也可以修改,直接传入一个url,然后在方法中提取参数部分,最后进行转换,代码如下:functionurlParamToJson(url){if(!url){return{};}让json={};url.substring(url.indexOf('?')+1).trim().split('&').forEach(item=>json[item.split('=')[0]]=item.split('=')[1]);returnjson;}传入用于测试控制台的url。log(JSON.stringify(urlParamToJson('http://example.com?type=1&keyword=js')))的输出如下:{"type":"1","keyword":"js"}
