后台返回数据打印是[object object]的,报错:SyntaxError: JSON.parse: expected property name or ‘}‘ at line 1 column
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/json
免费下载资源
·
今天基于这个问题纠结了一下午,导致这个问题的坑也是挺深的,查找问题最好是从这条数据的存储开始查找
问题1:先确定后台接收数据后存储到数据库里有没有自动转义特殊字符,比如
原始数据是:[{"user_id":20,"good":true}],这样的一个对象数组
存入数据库是:[{"user_id":20,"good":true}]
说明数据经过后端的逻辑处理,把前端的数据转义存储了
解决这个问题,前端传参数组的时候先用JSON.stringify序列化数据,再交给后端,这样就不用管后端开发者怎么处理的数据了
那么,我是序列化后的数据打印看到的还是它:[{"user_id":20,"good":true}],只不过它已经是字符串了
后台存储自动转义的时候,其实就是把一些特殊字符做了一些处理,以免其它更多的bug出现
这里提供两个常用函数处理这种转义的字符串,如下
/**
* 把html转义成HTML实体字符
* @param str
* @returns {string}
* @constructor
*/
export let htmlEncode = (str) => {
var s = "";
if (str.length === 0) {
return "";
}
s = str.replace(/&/g, "&");
s = s.replace(/</g, "<");
s = s.replace(/>/g, ">");
s = s.replace(/ /g, " ");
s = s.replace(/\'/g, "'");//IE下不支持实体名称
s = s.replace(/\"/g, """);
return s;
}
/**
* 转义字符还原成html字符
* @param str
* @returns {string}
* @constructor
*/
export let htmlRestore = (str) => {
var s = "";
if (str.length === 0) {
return "";
}
s = str.replace(/&/g, "&");
s = s.replace(/</g, "<");
s = s.replace(/>/g, ">");
s = s.replace(/ /g, " ");
s = s.replace(/'/g, "\'");
s = s.replace(/"/g, "\"");
return s;
}
所以,如果后台返回的数据打印是这样的:[object object],
前台是通过
JSON.parse(item.good)
无法解析数据,并且报错如下:
SyntaxError: JSON.parse: expected property name or '}' at line 1 column 3 of the JSON data
那你极可能遇到和我一样的问题
我的解决方案是:不动后台逻辑代码处理,前端加一个函数处理返回的数据,这个函数就是我上面分享的
JSON.parse(htmlRestore(item.good))
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e
2 个月前
8c391e04
5 个月前
更多推荐
已为社区贡献4条内容
所有评论(0)