前言:
es6常用方法来解决功能需求。
1、出现复杂的json字符串如何去解析?
比如:下面这个字符串,如果用json.parse解析发现还是个字符串
"\"[{\\\"orgId\\\":\\\"1054021138280960\\\",\\\"orgName\\\":\\\"Engineering Department\\\"},{\\\"orgId\\\":\\\"1054021253648896\\\",\\\"orgName\\\":\\\"Project Team A\\\"}]\"";
解决方法
思路就是通过多级解析来解决问题,如果还是json字符串就在解析,如果不是就证明我们解析成功了。
封装方法:
parseMultiEscapedJSON(str) {try {// 可能需要多次解析直到得到最终对象let result = str;while (typeof result === 'string') {result = JSON.parse(result);}return result;} catch (e) {console.error('解析失败:', e);return null;}}
还有其它封装方法:
function safelyParseJSON(str) {try {// 尝试直接解析return JSON.parse(str);} catch (e) {try {// 如果失败,尝试去除可能的多余转义let cleanedStr = str;// 处理多层转义情况while (cleanedStr.includes('\\"') && cleanedStr.startsWith('"') && cleanedStr.endsWith('"')) {cleanedStr = cleanedStr.slice(1, -1).replace(/\\"/g, '"');}return JSON.parse(cleanedStr);} catch (e2) {console.error("无法解析JSON字符串:", e2);return null;}}
}// 使用示例
const result = safelyParseJSON(escapedString);
console.log(result);
2、根据多个参数,动态&拼接字段
我们实际使用中,需要循环对象的场景挺多的,二期还可以配合map啊等方法满足我们的需要
比如:`/dataPermission/queryWorkflowInfo?workFlowId=${params.workFlowId}&tenantId=${params.tenantId} ` 我们拼接一个这样的字符串,可以通过方法让循环params来实现动态拼接
方法1:
const queryString = Object.keys(params).map(key => `${key}=${params[key]}`).join('&');const result = `/dataPermission/queryWorkflowInfo?${queryString}`;
方法2:
const result = `/dataPermission/queryWorkflowInfo?${Object.keys(params).map(key => `${key}=${params[key]}`).join('&')}`;