后台返回数据打印是[object object]的,报错:SyntaxError: JSON.parse: expected property name or ‘}‘ at line 1 column

今天基于这个问题纠结了一下午,导致这个问题的坑也是挺深的,查找问题最好是从这条数据的存储开始查找

问题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, "'");//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) 

无法解析数据,并且报错如下:

后台返回数据打印是[object object]的,报错:SyntaxError: JSON.parse: expected property name or ‘}‘ at line 1 column_第1张图片

SyntaxError: JSON.parse: expected property name or '}' at line 1 column 3 of the JSON data

那你极可能遇到和我一样的问题

我的解决方案是:不动后台逻辑代码处理,前端加一个函数处理返回的数据,这个函数就是我上面分享的

JSON.parse(htmlRestore(item.good))

 

你可能感兴趣的:(vue.js,html,bug)