前端Js發送嵌套的json格式給後端報錯

發送嵌套的json格式,對方接收報錯!

 

現在遇到的問題是我發json給後端,後端收到後報錯,後端說我發的json格式有問題,或者是序列化後出問題,我用js寫的,應該所有json格式都是一樣的,無論前端和後端用什麼語言。

 

問題分析如下:

 

前端和後端定義的JSON格式(用json工具檢測爲合法):

 {

      "ip": "192.168.0.1",

       "userTxt": 1,

       "userType": 0,

        "mydata":

                     {

                        “neirong”:””,

                           ”id”:”5”,

                            ”zhanghao”:”ceshi”,

                           ”mima”:”123456”

                       }

 }

 

xx.js代碼如下(簡單的登陸界面獲取):

var zhanghao=window.document.getElementById("zhanghao").value; //獲取輸入賬號信息
var mima=window.document.getElementById("mima").value; //獲取用戶輸入密碼信息

//這個是定義的json格式,裏面還嵌套的json格式mydata
 let data = {
      "ip": "192.168.0.1",
       "userTxt": 1,
       "userType": 0,
        "mydata": {“neirong”:”12345”,”id”:””}
    }
 //因爲用戶輸入的賬號和密碼都是變量,所以不能直接寫再json裏,會報錯  
//我們想把賬號和密碼變量插入進去(知識點)
data .mydata.UserAccount = username;
data .mydata.UserPassword = password; 

//然後對json進行序列化,js的序列化方法是:
var send = JSON.stringify(data);   //json轉換爲字符串
console.log("發送數據(轉換後):" + sendStr); //打印出來轉換後發送的內容是不是字符串
ws.send(sendStr); 

這裏發送給後端,問題來了,後端收到後他那裏報錯,他跟別的socket通信時OK的,,但是跟我webscoket通信出問題,是通信問題?還是我的json有問題?

他收到的內容是原內容,所以跟通信沒有關係,但爲何報錯,我反覆檢查了我寫的json格式都沒有問題,沒有問題,那是我序列化出問題了?Js序列化轉換就這樣啊!

網上在線json格式轉換生成自定義類型試試,注意看:private Mydata mydata;

在線轉換工具:https://www.bejson.com/json2javapojo/new/

發現我發送給後端接收的madata是對象Mydata類型(也就是嵌套的json格式序列出問題了,或者說是沒有序列化),因爲後端定義的mydata是String類型(private String mydata;),我們發過去的是對象,它定義的是String類,可js沒有定義啊,都是var和let來定義類的,這個問題可以後端可以把mydata修改成對象,可它還要和其他人通信,改了可能不方便,前端怎麼修改?我想到的是對於嵌套的json單獨提取出來先序列號再導入

var zhanghao=window.document.getElementById("zhanghao").value; //獲取輸入賬號信息
var mima=window.document.getElementById("mima").value; //獲取用戶輸入密碼信息

/* 發送數據給後端處理 */
//先把mydata單獨提取出來
 let mydata= {
      "UserName":"",
       "UserType":"1",
}
//把變量插進去,嵌套方式
 mydata.zhanghao= zhanghao;
 mydata.mima= mima;
//對mydata的嵌套進行序列化
var mysend = JSON.stringify(mydata);

let data = {
      "ip": "192.168.0.1",
       "userTxt": 1,
       "userType": 0,
 		"mydata": mysend   //這個把上面序列化後的mysend放進來 
 }
//對大的json序列化
var sendStr = JSON.stringify(data);
//這樣發送過去的json就不會報錯了。
console.log("發送數據(轉換後):" + sendStr);
 ws.send(sendStr);  //發送給後端 

總結:對於json裏面還嵌套的json,單獨提取出來子json先序列化 JSON.stringify(xxxx),再放入主json裏。

最主要的是雙方間要相互溝通解決。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章