JS踩坑记录之JSON.Parse()转换失败

写在前面的话:

有一个小功能是在读取数据库配置后将数据以json字符串的形式传给了前端,前端使用JSON.parse()方法转换字符串的时候提示失败了,总结了一下解决的办法:

1.对字符串进行转义。

2.保存数据的时候进行编码。

3.后端直接返回个对象跳过使用JSON.parse()方法。

1.对字符串进行转义

一些常用的转义字符:

1、空格   :   

2、& :& 

3、<  :&lt;

4、>  :&gtl;

5、"   :&quot;

6、'    :&apos;

6、版权 :&copy;

转义可以使用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