JS踩坑记录之JSON.Parse()转换失败
写在前面的话:
有一个小功能是在读取数据库配置后将数据以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);
};
接着在控制器中返回赋值的实体对象 ,前端接受到的就是对象了
微信公公众号 搜索 “不正经小前端” 并关注,和我一起学习海量前端技术
本文来自博客园,作者:七分暖,转载请注明原文链接:https://www.cnblogs.com/lin494910940/p/12454842.html