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);
                };
复制代码

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

posted @   七分暖  阅读(15183)  评论(0编辑  收藏  举报
编辑推荐:
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
阅读排行:
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· RFID实践——.NET IoT程序读取高频RFID卡/标签
感觉不错来个赞@_@
回到顶部
点击右上角即可分享
微信分享提示