写在前面的话:
有一个小功能是在读取数据库配置后将数据以json字符串的形式传给了前端,前端使用JSON.parse()方法转换字符串的时候提示失败了,总结了一下解决的办法:
1.对字符串进行转义。
2.保存数据的时候进行编码。
3.后端直接返回个对象跳过使用JSON.parse()方法。
1.对字符串进行转义
一些常用的转义字符:
1、空格 :
2、& :&
3、< :<
4、> :>l;
5、" :"
6、' :'
6、版权 :©
转义可以使用js的replace()方法
2.保存数据的时候进行编码
使用js自带的encodeURI()对可能出现错误的文件进行编码之后再保存起来,需要读取的时候用decodeURI()方法再对该字符串进行解码。
该方法的优缺点:
优点:不需要像第一种方法一样针对一个个的字符进行转义,不会出现遗漏特殊字符的情况。
缺点:对不需要编码的字符也一并进行了编码之后增加了数据的存储空间,给服务器带来了一点存储压力。
3.后端直接返回个对象跳过使用JSON.parse()方法
如果数据是从后端传过来的,可以用对象的方式代替传递JSON字符串也就略过了使用JSON.parse()方法。
在这里举一个后端使用C#的小栗子:
首先创建一个实体类:
public class FastProcessData { public string alarmflag { get; set; } public string alarmname { get; set; } public string highflag { get; set; } public string lowflag { get; set; } public int alarmtype { get; set; } public string sendmsg { get; set; } public bool isstart { get; set; } }
接着读取数据的时候使用该实体的list<> 泛型列接收数据库的信息
for (int i = 0; i < table.Rows.Count; i++) { DataRow row = table.Rows[i]; str = string.IsNullOrEmpty(row["AlarmFlag"].ToString()) ? "0" : row["AlarmFlag"].ToString(); long[] typys = BinaryHelper.BigintToArray(Convert.ToInt64(str)); binHighFlag = typys[0].ToString(); binLowFlag = typys[1].ToString(); FastProcessData model = new FastProcessData() { alarmflag = row["AlarmFlag"].ToString(), alarmname = row["AlarmName"].ToString(), highflag = binHighFlag, lowflag = binLowFlag, alarmtype = Convert.ToInt32(row["AlarmType"]), sendmsg = row["SendMsg"].ToString(), isstart = Convert.ToBoolean(row["IsStart"]) }; list.Add(model); };
接着在控制器中返回赋值的实体对象 ,前端接受到的就是对象了