JSON.parse多层嵌套报错处理!

664 阅读1分钟

遇到后端返回的json是这样的,我再前端需要处理这个json并遍历

{
	"roleRight": "[{\"id\":0,\"role\":\"\",\"itemId\":456,\"funTitle\":\"协议处理\",\"funLink\":\"-\",\"funType\":null,\"headApi\":\"-\",\"fullApi\":null}]",
}

直接使用JSON.parse的时候会报一个错误

SyntaxError: Unexpected token i in JSON at position 17

研究了下找到解决的办法就是转义

//转义函数
function transSpecialChar(pageStr) {
    if (pageStr != undefined && pageStr != "" && pageStr != 'null') {
        pageStr = pageStr.replace(/\r/g, "\\r");
        pageStr = pageStr.replace(/\n/g, "\\n");
        pageStr = pageStr.replace(/\t/g, "\\t");
        pageStr = pageStr.replace(/\\/g, "\\\\");
        pageStr = pageStr.replace(/"\[{/g, "[{");
        pageStr = pageStr.replace(/}]"/g, "}]");
        // pageStr = pageStr.replace(/("")+/g, '"');
        pageStr = pageStr.replace(/"{"/g, "{\"");
        pageStr = pageStr.replace(/"}"/g, "\"}");
        pageStr = pageStr.replace(/}}"/g, "}}");
    }
    return pageStr;
}

直接调用这个方法就可以!!!

var str = transSpecialChar('{"roleRight":"[{\"id\":0,\"role\":\"\",\"itemId\":456,\"funTitle\":\"协议处理\",\"funLink\":\"-\",\"funType\":null,\"headApi\":\"-\",\"fullApi\":null}]"}')
//转义后再解析就不会报错
var sessions = JSON.parse(str)
console.log(sessions.length);
for (const key in sessions) {
    if (Object.hasOwnProperty.call(sessions, key)) {
        const element = sessions[key];
        console.log(element)
    }
}