JSON.parse意外失败的问题(传入内容在校验网站上检查无误)(传入内容来自CryptoJS.AES.decrypt解码)

发布时间 2023-04-10 17:10:43作者: 明月下
背景:由CryptoJS.AES.decrypt解码来的数据并进行toString(CryptoJS.enc.Utf8)之后,无法使用JSON.parse转换成json数据,但是使用在线校验工具认为格式正确。
可能是由于解码后的字符串包含了一些特殊字符或者不可见字符,导致JSON.parse方法无法正确解析字符串。可以尝试使用console.log()或者debugger等工具打印出解码后的字符串,查看是否存在特殊字符或者不可见字符。
解决方法:
可以尝试使用字符串的replace方法将不可见字符替换为可见字符。例如,可以使用如下代码将解码后的字符串中的不可见字符替换为空格:
var decodedString = CryptoJS.AES.decrypt(cipherText, key, options).toString(CryptoJS.enc.Utf8);
decodedString = decodedString.replace(/[\u0000-\u001F\u007F-\u009F]/g, ' ');
在上述代码中,正则表达式/[\u0000-\u001F\u007F-\u009F]/g用于匹配所有ASCII码小于32或大于等于127的字符,也就是所有不可见字符,然后使用空格替换这些字符。

另外,如果你知道不可见字符的具体字符编码,也可以将其直接替换为对应的可见字符。例如,可以使用如下代码将所有换行符\n替换为空格:
var decodedString = CryptoJS.AES.decrypt(cipherText, key, options).toString(CryptoJS.enc.Utf8);
decodedString = decodedString.replace(/\n/g, ' ');
这样做可以确保解码后的字符串中只包含可见字符,方便后续的JSON解析。