zoukankan      html  css  js  c++  java
  • 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);
                    };

    接着在控制器中返回赋值的实体对象 ,前端接受到的就是对象了

  • 相关阅读:
    mysql数据向Redis快速导入
    jquery.cookie.js使用
    怎么才能在职场中如鱼得水(转)
    内部类(编程思想)
    main方法原来只要放在public static类中就能跑,涨知识了
    匿名内部类--工厂
    Java通过继承外部类来建立该外部类的protected内部类的实例(转)
    监听器的使用例子 ServletContextListener
    Class.getResource()方法的使用
    maven打包资源文件(转)
  • 原文地址:https://www.cnblogs.com/lin494910940/p/12454842.html
Copyright © 2011-2022 走看看