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);
                };

接着在控制器中返回賦值的實體對象 ,前端接受到的就是對象了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM