前言:
es6常用方法来解决功能需求。
1、出现复杂的json字符串如何去解析?
比如:下面这个字符串,如果用json.parse解析发现还是个字符串
javascript
"\"[{\\\"orgId\\\":\\\"1054021138280960\\\",\\\"orgName\\\":\\\"Engineering Department\\\"},{\\\"orgId\\\":\\\"1054021253648896\\\",\\\"orgName\\\":\\\"Project Team A\\\"}]\"";
解决方法
思路就是通过多级解析来解决问题,如果还是json字符串就在解析,如果不是就证明我们解析成功了。
封装方法:
javascript
parseMultiEscapedJSON(str) {
try {
// 可能需要多次解析直到得到最终对象
let result = str;
while (typeof result === 'string') {
result = JSON.parse(result);
}
return result;
} catch (e) {
console.error('解析失败:', e);
return null;
}
}
还有其它封装方法:
javascript
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:
javascript
const queryString = Object.keys(params)
.map(key => `${key}=${params[key]}`)
.join('&');
const result = `/dataPermission/queryWorkflowInfo?${queryString}`;
方法2:
javascript
const result = `/dataPermission/queryWorkflowInfo?${Object.keys(params).map(key => `${key}=${params[key]}`).join('&')}`;